Seite 1 von 2
STDIN auslesen
Verfasst: 27.02.2006 15:06
von real
Hi,
nachdem ich jetzt schon überall danach erfolglos gesucht habe:
Wie kann ich stdin über mein Konsolenprogramm auslesen? Ich möchte z.B. auf der Konsole "programm < datei.txt" eingeben und mein programm soll mir die datei.txt zeilenweise ausgeben.
Re: STDIN auslesen
Verfasst: 27.02.2006 15:20
von Kiffi
tach real,
bin mir nicht ganz sicher, ob ich Dich jetzt richtig verstanden habe, aber
vielleicht löst [c]ProgramParameter()[/c] Dein Problem?
Grüße ... Kiffi
Verfasst: 27.02.2006 15:23
von stbi
schau mal
hier im englischen Forum
und in PB 4.0 ist das laut Fred nativ drin
Verfasst: 27.02.2006 15:34
von real
Kiffi hat geschrieben:tach real,
bin mir nicht ganz sicher, ob ich Dich jetzt richtig verstanden habe, aber
vielleicht löst [c]ProgramParameter()[/c] Dein Problem?
Grüße ... Kiffi
Nein - ich will praktisch eine Eingabeumlenkung in das Programm machen.
Hatte auch voll auf die Version 4 gehofft, allerdings funktioniert ReadConsoleData() da noch nicht.
Verfasst: 27.02.2006 15:35
von Batze
@real: Musste man dafür nen neuen Thread aufmachen?
Hätte doch gut in den in "PB-Beta" gepasst.
Verfasst: 27.02.2006 15:41
von real
@Batze:
Ja - musste ich. 1. will ich nicht warten, bis es unter PB4 funktioniert und zweitens hatte ich im "PB-Beta" einen Bug-Thread aufgemacht.
@stbi:
Das ist kein Problem, wenn ich von meiner Anwendung aus einen anderen Prozess starte. Aber mein Programm wird gestartet und soll aus stdin lesen.
Hab folgendes versucht:
Code: Alles auswählen
strInput.s = Space(1024)
hInput = GetStdHandle_(#STD_INPUT_HANDLE)
ReadConsole_(hInput, @strInput, Len(strInput), @numGelesen.l, #Null)
MessageRequester("Input:",strInput)
Das ganze hab ich als Consolen-Application kompiliert. Trotzdem kommt selbst nach "echo hallo | programm" nichts raus.
Verfasst: 27.02.2006 16:28
von stbi
real hat geschrieben:Hab folgendes versucht:
Code: Alles auswählen
strInput.s = Space(1024)
hInput = GetStdHandle_(#STD_INPUT_HANDLE)
ReadConsole_(hInput, @strInput, Len(strInput), @numGelesen.l, #Null)
MessageRequester("Input:",strInput)
Das ganze hab ich als Consolen-Application kompiliert. Trotzdem kommt selbst nach "echo hallo | programm" nichts raus.
Kann auch nicht. Mit ReadConsole_() holst Du Dir lediglich die aktuelle Standardeingabe der Konsole, nicht den Inhalt der Pipe! Bei ReadConsole_() müsste Dein Programm anhalten, dann kannst Du was tippen und mit F6 beenden, Dein Programm müsste dann das Getippte in strInput haben.
Kuck Dir mal das Beispiel von Rings aus dem englischen Forum an.
Verfasst: 27.02.2006 21:20
von real
So, das hier funktioniert:
Code: Alles auswählen
AllocConsole_()
stdin.l = GetStdHandle_(#STD_INPUT_HANDLE)
Repeat
input.s = Space(8192)
ReadFile_(stdin,@input,Len(input),@bytes.l,#Null)
Until input<>""
FreeConsole_()
input = RTrim(input)
MessageRequester("stdin",input)
cr$ = Chr(13)
MessageRequester("#CR","CRs: "+Str(CountString(input,cr$)))
@stbi: Dein Beispiel beschreibt zwar Eingabeumlenkung, ist aber nur interesant, wenn ich ein Programm wie telnet etc. "fernsteuern" will. Achte in dem Beispiel mal insb. auf CreateProcess!
Danke für Eure Hinweise
Verfasst: 28.02.2006 11:11
von stbi
aber so funktioniert
nicht
Verfasst: 04.03.2006 11:21
von real
Doch, wenn Du in den Compiler-Optionen bei "Executable-Format" Console aktiviert hast.