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 16: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 13:24

Re: Pipe funktioniert nicht

Beitragvon georg » Mo, 04. Jan 2016 16: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: 1848
Registriert: Fr, 08. Feb 2008 22:29

Re: Pipe funktioniert nicht

Beitragvon Wonderer » Mo, 04. Jan 2016 16: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 13:24

Re: Pipe funktioniert nicht

Beitragvon Jan » Mo, 04. Jan 2016 18: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: 11887
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle

Re: Pipe funktioniert nicht

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

ah, nice..

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

Re: Pipe funktioniert nicht

Beitragvon brandelh » Di, 05. Jan 2016 8: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: 13490
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: Pipe funktioniert nicht

Beitragvon Wonderer » Mo, 08. Feb 2016 10: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 13:24


Zurück zu Newbie

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast