moin liste
ich bin der neue und hab' da auch gleich 'ne frage:
ich soll unter linux ein programm schreiben, das mit eine bunten java-oberfläche kommunizieren kann. mein problem ist jetzt, daß das programm mit einem textfile als "parameter" aufgereufen wrid, im stil von progxyz.pas < textfile.txt
solange alle readln's noch was aus dem text ziehen können klappt alles prima, aber danach soll die normale tastatureingabe wieder laufen, un das klappt nicht. ich muß das ding immer gewaltsam killen, um wieder was machen zu können. hab schon alle (glaub ich) kombinationen von input/output/assign/reset/rewrite/close (open?) probiert, und das ganze in gpc , fpc und kylix nix läuft muß ich das inputfile erst schließen, wenn ja , wie close(input) klappt teilweise, aber readln will trotzdem nicht (auch readkey und keypressed wollen nicht)
so denn
jan ______________________________________________________________________________ ComputerBild 15-03 bestaetigt: Den besten Spam-Schutz gibt es bei WEB.DE FreeMail - Deutschlands beste E-Mail - http://s.web.de/?mc=021121
Jan Strauch schrieb:
ich bin der neue und hab' da auch gleich 'ne frage:
ich soll unter linux ein programm schreiben, das mit eine bunten java-oberfläche kommunizieren kann. mein problem ist jetzt, daß das programm mit einem textfile als "parameter" aufgereufen wrid, im stil von progxyz.pas < textfile.txt
solange alle readln's noch was aus dem text ziehen können klappt alles prima, aber danach soll die normale tastatureingabe wieder laufen, un das klappt nicht. ich muß das ding immer gewaltsam killen, um wieder was machen zu können. hab schon alle (glaub ich) kombinationen von input/output/assign/reset/rewrite/close (open?) probiert, und das ganze in gpc , fpc und kylix nix läuft muß ich das inputfile erst schließen, wenn ja , wie close(input) klappt teilweise, aber readln will trotzdem nicht
Also, etwas seltsam ist das schon, normalerweise dient `<' ja dazu, die Standardeingabe (normalerweise Tastatur) zu ersetzen. Evtl. wäre es daher sinnvoller, die beiden Dinge über getrennte Dateien zu lesen, also z.B. die Standardeingabe über `Input' und den Dateinamen als Kommandozeilen-Paramaeter zu übergeben und mit einer Dateivariable zu öffnen.
Wenn das aus irgendeinem Grund nicht geht und der Aufruf mit Umleitung sein "muss", kann man noch auf das Terminal zugreifen. Dieses kann man als normale Datei öffnen. Der Dateiname wird durch `TtyDeviceName' in der Unit `GPC' gegeben.
Wenn gewünscht, kann man auch `Input' neu öffnen, also:
uses GPC;
[...]
Close (Input); Reset (Input, TtyDeviceName);
Das Problem könnte sein, wann man das machen muss. Wenn es viele `ReadLn's im Programm gibt, und prinzipiell bei jedem der Wechsel von Standardeingabe zu Terminal stattfinden kann, müsste man praktisch vor jedem auf `EOF' testen und dann ggf. wechseln. Das kann aufwendig werden ...
Eine "billige" Lösung wäre evtl. auf der Shell-Ebene möglich, wenn das in der Umgebung geht, im Stil von:
cat textfile.txt - | progxyz.pas
(sodass `cat' die Datei und Standardeingabe zusammenfügt und dem Programm als dessen Standardeingabe weiterreicht).
(auch readkey und keypressed wollen nicht)
Wenn du die Unit CRT benutzt, wird es evtl. noch aufwendiger (weil die nicht über `Input' liest). Wenn das nötig ist (und nicht nur ein Versuch war, weil es mit `ReadLn' nicht ging), müsste man nochmal drüber nachdenken.
Frank
On Don, Jul 24, 2003 at 03:55:21 +0200, Frank Heckenbach wrote:
Jan Strauch schrieb:
mein problem ist jetzt, daß das programm mit einem textfile als "parameter" aufgereufen wrid, im stil von progxyz.pas < textfile.txt
Ich verstehe das Problem so: Du willst etwas aus einem Textfile lesen, nachdem das Lesen abgeschlossen ist, soll das Programm auf Tastendrücke reagieren.
Also etwa so: begin { öffnen von input, usw ... } while not Eof (input) do begin ReadLn (input, Zeile); { tu was mit Zeile } end; { Ab jetzt wieder Tastendrücke im Programm zulassen } { alles schliessen } { ende } end.
Ist es etwa so gemeint ?
(auch readkey und keypressed wollen nicht)
Wenn du die Unit CRT benutzt, wird es evtl. noch aufwendiger (weil die nicht über `Input' liest). Wenn das nötig ist (und nicht nur ein Versuch war, weil es mit `ReadLn' nicht ging), müsste man nochmal drüber nachdenken.
Kannst Du die Datei vielleicht später lesen, indem Du dem Benutzer ein Menü anbietest?
Eike