Pipe funktioniert nicht

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

Moderator: Moderatoren

Pipe funktioniert nicht

Beitragvon Wonderer » Mo, 04. Jan 2016 15:17

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!
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 107
Registriert: Do, 06. Jul 2006 12:24

Re: Pipe funktioniert nicht

Beitragvon georg » Mo, 04. Jan 2016 15:29

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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1780
Registriert: Fr, 08. Feb 2008 21:29

Re: Pipe funktioniert nicht

Beitragvon Wonderer » Mo, 04. Jan 2016 15:56

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

Re: Pipe funktioniert nicht

Beitragvon Jan » Mo, 04. Jan 2016 17:02

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
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Foren-Administrator
Foren-Administrator
 
Beiträge: 11630
Registriert: Fr, 23. Sep 2005 17:23
Wohnort: 49328 Melle

Re: Pipe funktioniert nicht

Beitragvon Wonderer » Mo, 04. Jan 2016 18:33

ah, nice..

vielen Dank, dass hilft mir sehr weiter!
Wonderer
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 107
Registriert: Do, 06. Jul 2006 12:24

Re: Pipe funktioniert nicht

Beitragvon brandelh » Di, 05. Jan 2016 7:18

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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13332
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: Pipe funktioniert nicht

Beitragvon Wonderer » Mo, 08. Feb 2016 9:24

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


Zurück zu Newbie

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast