STDIN auslesen
STDIN auslesen
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.
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
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
bin mir nicht ganz sicher, ob ich Dich jetzt richtig verstanden habe, aber
vielleicht löst [c]ProgramParameter()[/c] Dein Problem?
Grüße ... Kiffi
a²+b²=mc²
Nein - ich will praktisch eine Eingabeumlenkung in das Programm machen.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
Hatte auch voll auf die Version 4 gehofft, allerdings funktioniert ReadConsoleData() da noch nicht.
@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:
Das ganze hab ich als Consolen-Application kompiliert. Trotzdem kommt selbst nach "echo hallo | programm" nichts raus.
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)
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.real hat geschrieben:Hab folgendes versucht:Das ganze hab ich als Consolen-Application kompiliert. Trotzdem kommt selbst nach "echo hallo | programm" nichts raus.Code: Alles auswählen
strInput.s = Space(1024) hInput = GetStdHandle_(#STD_INPUT_HANDLE) ReadConsole_(hInput, @strInput, Len(strInput), @numGelesen.l, #Null) MessageRequester("Input:",strInput)
Kuck Dir mal das Beispiel von Rings aus dem englischen Forum an.
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."
Es gibt keine Vista-Witze. Es ist alles wahr!
Es gibt keine Vista-Witze. Es ist alles wahr!
So, das hier funktioniert:
@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
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$)))
Danke für Eure Hinweise
aber so funktioniert
nicht
Code: Alles auswählen
echo hallo|DeinProgramm.exe
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."
Es gibt keine Vista-Witze. Es ist alles wahr!
Es gibt keine Vista-Witze. Es ist alles wahr!