Pipe funktioniert nicht

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Pipe funktioniert nicht

Beitrag von Wonderer »

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!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Pipe funktioniert nicht

Beitrag von georg »

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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Re: Pipe funktioniert nicht

Beitrag von Wonderer »

georg hat geschrieben:zum einen geht es mit fOpen(), fWrite() und fClose() sicher deutlich besser.
Naja, ist ein Workaround aber nach meinem Verständnis müsste ein Console-Programm von XBase die Ausgaben ebenso machen
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.
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.
Noch nicht so ganz - sorry.
Wenn ich dem Linker mit 'subsystem:console' angebe dass es ein Konsoleprogramm ist - dann macht '?' keine Ausgabe an STDOUT? :confused1:
Einen Versuch wert wäre die Umleitung mit 2>
Ja, das war ein Versuch ohne Erfolg.. :)
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Pipe funktioniert nicht

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Re: Pipe funktioniert nicht

Beitrag von Wonderer »

ah, nice..

vielen Dank, dass hilft mir sehr weiter!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Pipe funktioniert nicht

Beitrag von brandelh »

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.)
Gruß
Hubert
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 107
Registriert: Do, 06. Jul 2006 13:24

Re: Pipe funktioniert nicht

Beitrag von Wonderer »

brandelh 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
Achsooo, danke :)

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.
Antworten