Hallo,
ich habe hier ein neues Programm geschrieben welches mir aus einer Datenbank selektiv eine CSV-Datei erstellt.
Das Programm gibt mir mittels '?' Meldungen aus ('z.b. IDs und Details von Datensätzen die übersprungen werden).
Wenn ich das Programm aufrufe läuft das auch wunderbar durch und ich sehe die Ausgabe im Fenster der Kommandozeile.
Da ich das jetzt über eine relativ große Datenbank laufen lassen möchte habe ich versucht über das '>' die Ausgabe
umzuleiten in eine Datei. Leider funktioniert das nicht - die Datei wird erstellt aber bleibt leer (auch keine Leerzeilen).
zum Testen habe ich gleich nochmal 'dir *.prg >test.txt' versucht und das funktioniert.
Wieso geht das mit der Pipe nicht wenn ich Ausgaben mit '?' generiere und wie bekomme ich das dennoch hin?
danke schon mal für die Hilfe!
Pipe funktioniert nicht
Moderator: Moderatoren
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2832
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 99 Mal
- Danksagung erhalten: 13 Mal
Re: Pipe funktioniert nicht
Hallo,
zum einen geht es mit fOpen(), fWrite() und fClose() sicher deutlich besser.
Dazu kommt, dass der Anzeigebereich eines Xbase++-Programms nicht (wie bei DOS) einfach an den Monitor gesendet wird, sondern schon ein Windows-Fenster ist, das sich sehr gut tarnt. Das Piping leitet Ausgaben an den Monitor um, nicht aber Ausgaben an ein Windows-Fenster (Keiner würde das mit Word versuchen - Word sieht aber auch anders aus, das gebe ich zu). Ich hoffe, ich habe mich verständlich ausgedrückt.
Einen Versuch wert wäre die Umleitung mit 2> (siehe: https://support.microsoft.com/de-de/kb/110930), obwohl ich dem auch nicht viele Erfolgschancen einräume.
zum einen geht es mit fOpen(), fWrite() und fClose() sicher deutlich besser.
Dazu kommt, dass der Anzeigebereich eines Xbase++-Programms nicht (wie bei DOS) einfach an den Monitor gesendet wird, sondern schon ein Windows-Fenster ist, das sich sehr gut tarnt. Das Piping leitet Ausgaben an den Monitor um, nicht aber Ausgaben an ein Windows-Fenster (Keiner würde das mit Word versuchen - Word sieht aber auch anders aus, das gebe ich zu). Ich hoffe, ich habe mich verständlich ausgedrückt.
Einen Versuch wert wäre die Umleitung mit 2> (siehe: https://support.microsoft.com/de-de/kb/110930), obwohl ich dem auch nicht viele Erfolgschancen einräume.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Re: Pipe funktioniert nicht
Naja, ist ein Workaround aber nach meinem Verständnis müsste ein Console-Programm von XBase die Ausgaben ebenso machengeorg hat geschrieben:zum einen geht es mit fOpen(), fWrite() und fClose() sicher deutlich besser.
wie eine BAT-Datei - die dann in eine Datei umgeleitet werden kann. Andernfalls muss man ja komplett alle Ausgaben im Quellcode
als eigene Datei-Operationen umschreiben.
Noch nicht so ganz - sorry.Das Piping leitet Ausgaben an den Monitor um, nicht aber Ausgaben an ein Windows-Fenster (Keiner würde das mit Word versuchen - Word sieht aber auch anders aus, das gebe ich zu). Ich hoffe, ich habe mich verständlich ausgedrückt.
Wenn ich dem Linker mit 'subsystem:console' angebe dass es ein Konsoleprogramm ist - dann macht '?' keine Ausgabe an STDOUT?
Ja, das war ein Versuch ohne Erfolg..Einen Versuch wert wäre die Umleitung mit 2>
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Pipe funktioniert nicht
Wenn Du die Ausgabe ohnehin nur mit ? machst - dann set doch SET ALTERNATE TO cDatei. Damit wird alles paralell in die angegebene Datei ausgegeben
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Pipe funktioniert nicht
PIPE ist aber was anderes als eigene Ausgaben in eine Datei zu machen ... das ist ein Beispiel für einen PIPE Aufruf.
dir | MeinFilter > Ausgabe.Txt
damit das funktioniert, muss man die Eingaben von STDIN verarbeiten und auf STDOUT ausgeben.
die Eingaben zu verarbeiten hab ich nie mit Xbase++ gemacht,
aber der mit ? ausgegebene Text einer CONSOLEN Anwendung (GUI no) sollte mit > umlenkbar sein.
*** hab ich eben aber nicht hinbekommen
Kann man mit FOPEN() STDIN / STDOUT öffnen ?
(Bei PowerBasic mache ich das so, das nutze ich auch für Tools die so arbeiten sollen.)
dir | MeinFilter > Ausgabe.Txt
damit das funktioniert, muss man die Eingaben von STDIN verarbeiten und auf STDOUT ausgeben.
die Eingaben zu verarbeiten hab ich nie mit Xbase++ gemacht,
aber der mit ? ausgegebene Text einer CONSOLEN Anwendung (GUI no) sollte mit > umlenkbar sein.
*** hab ich eben aber nicht hinbekommen
Kann man mit FOPEN() STDIN / STDOUT öffnen ?
(Bei PowerBasic mache ich das so, das nutze ich auch für Tools die so arbeiten sollen.)
Gruß
Hubert
Hubert
Re: Pipe funktioniert nicht
Achsooo, dankebrandelh hat geschrieben:PIPE ist aber was anderes als eigene Ausgaben in eine Datei zu machen ... das ist ein Beispiel für einen PIPE Aufruf.
dir | MeinFilter
Ich habe jetzt überall eine Weiche drin je nach dem wo die Ausgabe erfolgen soll - eine UDF wäre da aber noch viel angenehmer zu lesen im Code.