Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [DOS] Ausgabe abfangen (https://www.delphipraxis.net/118755-%5Bdos%5D-ausgabe-abfangen.html)

marabu 14. Aug 2008 12:13

Re: [DOS] Ausgabe abfangen
 
Dein Programm erwartet Daten auf STDIN. Wenn diese Daten nicht über eine Pipe angeliefert werden, dann kannst du sie per input redirection "prog < filename" bereit stellen. Oder per command line parameter:

Delphi-Quellcode:
begin
  AssignFile(input, ParamStr(1));
  // ...
end;
Das Ende der Eingabe kannst du über die Tastatur mit Strg+Z signalisieren, wenn du keine Eingabe-Umleitung verwendet hast.

Andi1985 14. Aug 2008 12:35

Re: [DOS] Ausgabe abfangen
 
Zitat:

Zitat von marabu
Dein Programm erwartet Daten auf STDIN. Wenn diese Daten nicht über eine Pipe angeliefert werden, dann kannst du sie per input redirection "prog < filename" bereit stellen. Oder per command line parameter:

Delphi-Quellcode:
begin
  AssignFile(input, ParamStr(1));
  // ...
end;
Das Ende der Eingabe kannst du über die Tastatur mit Strg+Z signalisieren, wenn du keine Eingabe-Umleitung verwendet hast.

versteh ich nicht ganz ...

entweder hab ich den Aufruf meiner exe mit einem PIPE davor oder nicht...
wenn meine Exe normal aufgerufen wird... soll sie den quellcode (siehe oben) nicht ausführen..

ah das ist aber schlecht, kann man nicht abfragen ob "aufruf mit pipe oder ohne" ?
also

Delphi-Quellcode:
WENN PIPE DANN
AssignFile(input, ''); //stdin
  AssignFile(output, ''); //stdout
  Reset(input);
  Rewrite(output);
  while not Eof do
  begin
    ReadLn(line);
    WriteLn(line);
  end;
  CloseFile(output);
  CloseFile(input);
END

gammatester 14. Aug 2008 12:39

Re: [DOS] Ausgabe abfangen
 
Zitat:

Zitat von Mogtar
mir ist aber noch etwas aufgefallen:
wenn ich nun meine exe normal aufrufe ohne Type C:\boot.ini | dann bleibt er bei EOF hängen :(

Dann gibt doch ein EOF ein: CtrlZ bzw. StrgZ.

Gammatester

Andi1985 14. Aug 2008 13:09

Re: [DOS] Ausgabe abfangen
 
Zitat:

Zitat von gammatester
Zitat:

Zitat von Mogtar
mir ist aber noch etwas aufgefallen:
wenn ich nun meine exe normal aufrufe ohne Type C:\boot.ini | dann bleibt er bei EOF hängen :(

Dann gibt doch ein EOF ein: CtrlZ bzw. StrgZ.

Gammatester

versteh ich jetzt nicht was du meinst...

gammatester 14. Aug 2008 13:23

Re: [DOS] Ausgabe abfangen
 
Zitat:

Zitat von Mogtar
Zitat:

Zitat von gammatester
Zitat:

Zitat von Mogtar
mir ist aber noch etwas aufgefallen:
wenn ich nun meine exe normal aufrufe ohne Type C:\boot.ini | dann bleibt er bei EOF hängen :(

Dann gibt doch ein EOF ein: CtrlZ bzw. StrgZ.

Gammatester

versteh ich jetzt nicht was du meinst...

Er hängt nicht, sondern wartet auf EOF. Und das mußt Du halt eingeben, und das ASCII-Zeichen dafür es ist nun mal ein CtrlZ bzw. StrgZ, oder vergleiche:

Zitat:

Zitat von marabu
Das Ende der Eingabe kannst du über die Tastatur mit Strg+Z signalisieren ...


Andi1985 14. Aug 2008 13:31

Re: [DOS] Ausgabe abfangen
 
aber das Programm soll ohne die Manuelle Eingabe des Benutzern laufen...
wenn ich dich jetzt richtig verstehe.. das heißt ich muss das Quellcodetechnisch abfangen... nur wie...

gammatester 14. Aug 2008 14:00

Re: [DOS] Ausgabe abfangen
 
Zitat:

Zitat von Mogtar
aber das Programm soll ohne die Manuelle Eingabe des Benutzern laufen...
wenn ich dich jetzt richtig verstehe.. das heißt ich muss das Quellcodetechnisch abfangen... nur wie...

???

Du wolltest doch wissen, wie man ein EOF eingibt, wenn man das Programm interaktiv ohne Redirection startet! (Genauer Du hast behauptet "er hängt wenn ..."). Und nur darauf habe ich geantwortet.

Wenn Du die ganze Zeit meinst, wie man feststellen kann, ob input umgeleitet ist oder eine Konsole ist: Es muß irgendwo eine API-Funktion geben, die in etwa sagt "handle is console" (jedenfalls gibt's das im DOS-API, und es würde mich wundern wenn's so eine Fkt. nicht für WIN32 gibt). Als Handle dann entweder TTextRec(input).Handle oder GetStdHandle(STD_INPUT_HANDLE) verwenden. (Ungetestet! Also ausprobieren, bzw. selbstfinden oder auf Hinweise von anderen DP-Usern warten).

Gammatester

Zusatz via Edit: Ein kurzer Test zeigt, daß
Delphi-Quellcode:
GetFileType(GetStdHandle(STD_INPUT_HANDLE))
je nach Aufrufart unterschiedliche Werte liefert, hier für die Werte siehe Delphihilfe zu GetFileType

Andi1985 14. Aug 2008 14:44

Re: [DOS] Ausgabe abfangen
 
Zitat:

Zitat von gammatester
Zusatz via Edit: Ein kurzer Test zeigt, daß
Delphi-Quellcode:
GetFileType(GetStdHandle(STD_INPUT_HANDLE))
je nach Aufrufart unterschiedliche Werte liefert, hier für die Werte siehe Delphihilfe zu GetFileType


cool, danke^^

RWarnecke 14. Aug 2008 15:22

Re: [DOS] Ausgabe abfangen
 
Zitat:

Zitat von Hansa
Wiseo geht das hier nicht ?

Delphi-Quellcode:
var s : TStringList;
begin
  s.LoadFromFile ('C:\boot.ini');
Oder muss es komplizierter sein ? :shock:

Hansa da gebe ich Dir recht, warum einfach wenn es auch umständlich geht. Das gleiche ist mit meiner Funktion. Einfach den Befehl Type boot.ini übergeben und als Ergebnis die Ausgabe.

Hansa 14. Aug 2008 16:10

Re: [DOS] Ausgabe abfangen
 
So was wie hier, das sind Threads, wo es schon fast zu blöd wird, zu antworten. :lol: @Fragesteller : warum ist LoadFromFile bei dir nicht möglich ? Nur, um Daten aus einer Textdatei im Programm auszuwerten ? :wall: Ja, echt sagenhaft. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz