STDIN auslesen

Anfängerfragen zum Programmieren mit PureBasic.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

STDIN auslesen

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: STDIN auslesen

Beitrag 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
a²+b²=mc²
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

schau mal hier im englischen Forum

und in PB 4.0 ist das laut Fred nativ drin
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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.
stbi hat geschrieben:schau mal hier im englischen Forum

und in PB 4.0 ist das laut Fred nativ drin
Hatte auch voll auf die Version 4 gehofft, allerdings funktioniert ReadConsoleData() da noch nicht.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

@real: Musste man dafür nen neuen Thread aufmachen?
Hätte doch gut in den in "PB-Beta" gepasst.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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.
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag 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.
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

aber so funktioniert

Code: Alles auswählen

echo hallo|DeinProgramm.exe
nicht
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Doch, wenn Du in den Compiler-Optionen bei "Executable-Format" Console aktiviert hast.
Antworten