Problem mit Libre Office und RunProgram

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Problem mit Libre Office und RunProgram

Beitrag von bin_neu_hier »

Hallo,

wahrscheinlich sehe ich mal wieder vor lauter Wald die Bäume nicht mehr ...

Folgendes Problem: Mein Proggi erstellt eine CSV-Datei, alle Werte semicolongetrennt, alles einfacher Text, keine Sonderzeichen, keine Umlaute.

Dann soll die Datei von Libreoffice geöffnet werden, das mache ich so:

Code: Alles auswählen

err = RunProgram(Chr(34)+Tabellenkalkulation$+Chr(34), Chr(34)+csvfile$+Chr(34), Chr(34)+homedir$+Chr(34), #PB_Program_Wait)  
LibreOffice startet, zeigt ein kleines Fenster, wo man einstellen könnte, ob die Daten mit Semikolon, Komma o. ä. getrennt sind. Hier klicke ich OK und dann - nix mehr.

Mein Proggi wartet wegen "#PB_Program_Wait", dass LO beendet wird, aber LO kann nicht beendet werden, weil kein Fenster vorhanden. Ohne "#PB_Program_Wait" funktioniert das einwandfrei, es wäre aber für den weiteren Progablauf ungünstig, wenn mein Proggi nicht auf LO warten würde. Hat jemand eine Idee, wie man das doch mit "#PB_Program_Wait" hinbekommt?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Problem mit Libre Office und RunProgram

Beitrag von Sicro »

Versuche es mal so:

Code: Alles auswählen

err = RunProgram(Tabellenkalkulation$, Chr(34)+csvfile$+Chr(34), homedir$, #PB_Program_Wait)
Die Pfadangaben sollten nur in Anführungszeichen stehen, wenn sie als Parameter übergeben werden, weil nur dort die Gefahr besteht, dass sie falsch interpretiert werden.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Re: Problem mit Libre Office und RunProgram

Beitrag von bin_neu_hier »

Vielen Dank für Deinen Beitrag, hat aber das Problem nicht lösen können.
Die Variablen Tabellenkalkulation$, csvfile$ und homedir$ enthalten Pfadangaben, die theoretisch auch Leerzeichen enthalten könnten. Deswegen gehe ich davon aus, dass ich nicht auf die chr(34) verzichten kann. Andererseits funktioniert es nach PC-Start genau 1 mal (auch mit Chr(34)), beim zweiten und jedem weiteren Mal kommt der Fehler wie beschrieben. Leider zeigt LO dann auch kein Icon in der Taskleiste, um damit irgendwie ein Fenster nach vorne bringen zu können.

Übrigens: Wenn ich das vergeblich wartende Programm per Taskmanager abschieße, erst dann öffnet sich LO mit der geladenen CSV-Datei.

Habe gerade eine neue Fährte aufgenommen, nämlich den LO-Parameter "--infilter". Wenn ich das soweit richtig verstanden habe, kann man damit definieren, welche Spalten welches Datenformat haben. Da muss man sich erst mal durchwurschteln. Vielleicht hat da schon jemand Erfahrungen und kann helfen?
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Problem mit Libre Office und RunProgram

Beitrag von Sommertv »

Schönen Abend,
ich hab auch immer Probleme mit RunProgram, manchmal tut's was es soll und dann wieder nicht...
Versuch doch mal den kompletten String in eine batch Datei zu schreiben und anschliessend die batch Datei mit RunProgram zu starten.
Bei mir funktioniert das, wobei es nicht die eleganteste Lösung ist.

Schöne Grüsse
Kurt
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: Problem mit Libre Office und RunProgram

Beitrag von Sirius-2337 »

Dieser Code funktioniert bei mir Problemlos.

LibreOffice startet, zeigt ein kleines Fenster, wo man einstellen könnte, ob die Daten mit Semikolon, Komma o. ä. getrennt sind. Hier klicke ich OK und dann öffnet sich LO. Und wenn ich LO wieder schließe endet das Programm.

Code: Alles auswählen

Tabellenkalkulation$ = "C:\Program Files\LibreOffice\program\scalc.exe"
csvfile$ = "H:\tmp\Test Datei.csv"  ;Hier Pfad anpassen
homedir$ = GetPathPart(csvfile$)

If CreateFile(0, csvfile$)
  
  WriteString(0, "Test;Foo;Bar" + #CRLF$ +
                 "1;2;3" + #CRLF$ +
                 "4;5;6" + #CRLF$ +
                 "7;8;9")
  
  CloseFile(0)
  
  err = RunProgram(Tabellenkalkulation$, Chr(34)+csvfile$+Chr(34), Chr(34)+homedir$+Chr(34), #PB_Program_Wait) 

Else
  Debug "Konnte Datei nicht erstellen."
EndIf
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Problem mit Libre Office und RunProgram

Beitrag von Sicro »

bin_neu_hier hat geschrieben:Die Variablen Tabellenkalkulation$, csvfile$ und homedir$ enthalten Pfadangaben, die theoretisch auch Leerzeichen enthalten könnten. Deswegen gehe ich davon aus, dass ich nicht auf die chr(34) verzichten kann.
Das Problem mit den Leerzeichen existiert nur bei den Parametern.
bin_neu_hier hat geschrieben:Habe gerade eine neue Fährte aufgenommen, nämlich den LO-Parameter "--infilter". Wenn ich das soweit richtig verstanden habe, kann man damit definieren, welche Spalten welches Datenformat haben. Da muss man sich erst mal durchwurschteln. Vielleicht hat da schon jemand Erfahrungen und kann helfen?

Code: Alles auswählen

err = RunProgram(Tabellenkalkulation$, ~"--infilter=\"csv:59\" \"" + csvfile$ + ~"\"", homedir$, #PB_Program_Wait)
Nach dem "csv:" wird das Feldtrennzeichen (ASCII "59" = Semikolon) angegeben.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Gelöst: Problem mit Libre Office und RunProgram

Beitrag von bin_neu_hier »

Hallo Allerseits!

Das Problem, dass LO beim Import von CSV-Dateien wegen

Code: Alles auswählen

 Runprogramm ... #PB_Program_Wait
den Dienst verweigert, konnte ich so lösen:

Code: Alles auswählen

RunProgram(Chr(34)+Tabellenkalkulation$+Chr(34), infilter$ + " " + "-o "+Chr(34)+csvfile$+Chr(34), Chr(34)+GetPathPart(Tabellenkalkulation$)+Chr(34), #PB_Program_Wait)
wobei infilter$ den Parameter für den CSV-Import bereitstellt. Könnte zum Beispiel so aussehen:

Code: Alles auswählen

 infilter$ = "--infilter="+Chr(34)+"csv:59/9,34,1,1,1/2/2/4/3/1/4/1/5/2/6/1/7/2/8/1,3072,true,false"+Chr(34)
Habe folgendes herausgefunden: Will man eine CSV-Datei öffnen, von der man den Aufbau kennt, erspart dieser Importfilter einiges an Nachbearbeitung in LO. In meinem Fall generiert ein Programm eine CSV-Datei (weil ich nicht weiß, wie man eine LO-Calc-Datei programmiert), deren Aufbau beispielsweise so aussieht:
1. Zeile Spaltenüberschriften
2. und folgende Zeilen sind alles Werte, und zwar in dieser Reihenfolge (Spalten, von links nach rechts): Text,Datum,Zahl,Text,Zahl,Text,Zahl

Dann müsste der Infilter-Parameter wie oben gezeigt aussehen, wobei die Werte folgendes bedeuten:
59/9 Trennung per Semikolon und/oder Tab
34 Trennung für Texte (z. B. Spaltenüberschriften aus Text müssen je Zelle in "" Gänsefüßchen eingeschlossen werden). Ist der jeweilige ASCII-Code für das betreffende Trennzeichen
1 (die erste 1 im Beispiel) steht für den Zeichensatz "Windows-1252/WinLatin 1 (Western)"
1 (die zweite) steht für die Zeilennummer, 1 = oberste Zeile in der Tabelle
dann folgen für jede Spalte von links nach rechts folgende Paare: Spaltennummer/Format (/S/F/S/F/S/F/... für weitere Spalten). Im Beispiel: 1/2 = erste Spalte, Wert = Text /2/4 (zweite Spalte, Wert = Datum DD.MM.YY), 3/1 = 3. Spalte, Format = Standard, usw.
zum Ende dann 3072 für Formate in deutsch(Deutschland) und 2 Bool-Werte, der erste steht für "Quoted field as text" = true, andernfalls false, der letzte für "Detect special numbers", wenn ja, dann true, sonst false.

Mit diesem Startparameter öffnet LO die Datei ohne Rückfragen, mein Proggi wartet brav ab (#PB_Program_Wait) und macht weiter, wenn LO beendet wurde.

Alle diese Einstellungen macht man auch, wenn man in LO eine CSV-Datei öffnet, dann erscheint ein Fenster, in dem genau diese Daten abgefragt werden (wenn nicht als infilter-Parameter schon gegeben). Das obige habe ich mir mehr oder weniger aus mehreren Quellen, zum Teil sehr alten, zusammengereimt und mag unvollständig oder fehlerhaft sein, für meine Zwecke funktioniert es. Vielleicht hilft es ja jemandem weiter.

Tirili & Hoppsassa
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Antworten