Übergabe von String per Pipe an Programm

Jan-Michael

Jan-Michael

Aktives Mitglied
Thread Starter
Dabei seit
28.02.2005
Beiträge
397
Reaktionspunkte
0
Hallo Leute,

ich möchte einen String der Form "Hello World" unter Unix aus einer Datei auslesen und diesen per Pipe an ein Programm übergeben. Das Kommando sieht also in etwa so aus:

cat file | ./programm

Das Problem ist, dass der String nicht als einzelner String interpretiert wird, sondern als zwei ("Hello" und "World"). Dies ist allerdings nicht meine Absicht. Weiß jemand von euch, was ich in diesem Fall machen kann?

Habe auch schon versucht den String als "Hello,$'\302\240'World" in die Datei zu schreiben, die ich später auslese und an mein Programm übergebe. Auch das funktioniert nicht :-(.

Wäre euch wirklich für eure Hilfe dankbar!
 
Hallo,

Wie genau liest du denn die Datei aus? Wie sieht die Datei aus die du ausließt? Wie sieht das Programm aus an das du übergibst?

gruß exit
 
lies doch mal die ganzen unterschiede zwischen argv, argc usw...
 
Hallo und danke für eure Hilfe,

ich schreibe momentan ein Shell-Script, dass automatisch Eingaben an "irgendein" Programm liefern soll. Dabei müssen die Eingaben aus einer Datei stammen. Die Ausgabe wird dann in eine Datei geschrieben und weiter verarbeitet und so weiter und so fort ...

Die Programme haben aber alle die Form

Code:
#include <iostream>

int main()
{
std::string s;
std::cin >> s;
// Irgendeine Logik noch dazwischen
std::cout << s;
}

Bis jetzt ist mir nix besseres eingefallen, als einfach eine Pipe zu nehmen und vorher die sachen mit cat, more oder less aus der Quelldatei zu lesen.
 
Irgendwie ist mir das Problem nicht klar. Wenn "blah" nun die Zeile "huppla hello world happlu" enthält, dann bekommt man mit "./programm <blah" (oder von mir aus auch "cat <blah | ./programm") die Datei über stdin gelesen. Zeichen- oder Zeilenweise. Mit ./programm `cat <blah` bekäme man die Worte per argc und argv übergeben.

Das "shell-script, welches Eingaben aus einer Datei an ein Programm liefert", ist keins. Es ist der "<"-operator der shell.
 
Hallo Goglo

sagen wir ich habe die Datei reference.input. In dieser steht "Hello World". Mein Programm sieht wie folgt aus:

Code:
#include <iostream>

int main()
{
std::string s;
std::cin >> s;
std::cout << s;
}

Wenn ich die Zeile

cat < reference.input | ./programm

ausführe, bekomme ich per std::cout auf der Konsole nur "Hello" anstelle von "Hello World" angezeigt. Ich brauche jedoch die komplette Zeile als Eingabe.

Danke dir aber schonmal für deine bemühungen ;-)
 
Ohne jetzt der c++-Kenner zu sein, habe ich herausgefunden, daß es am "<<"-operator in Verbindung mit einem String liegt, unter "Parameters" findet sich die folgende Erklärung:
Extraction ends when the next character is either a valid whitespace or a null character, or if the End-Of-File is reached.

Und das beschreibt doch die Funktionsweise deines Programms recht treffend, nicht wahr?

Mit
char l[100];
std::cin.getline(l, 100) ;
std::cout << l;
klappt's aber wie gewünscht. Dein Problem hast Du also weniger mit der Shell, sondern mit c++. :)
 
Zurück
Oben Unten