Probleme mit Streams...
-
Hallo leute, ich habe vor in einer shell befehle einzugeben und diese werden dann ausgeführt. Die shell möchte ich erweitern, indem ich folgende Trennzeichen einabue wie z.b. '|' damit man mehrere Befehle ausführen kann wie z.B.:
>kill winamp.exe | counter 12 shutdownHier erstmal die Eingabe:
//Befehl mit Parameter einlesen getline(cin, str); istringstream cmdline (str); string input; vector<string> params; //suche das Trennzeichen if(str.find("|") != string::npos) { //Rückgabe der einzelnen token innerhalb des strings str vector<string> token = split(str,"|"); for(int i = 0; i < token.size(); i++) { cout << token[i] << endl; } } else if(cmdline >> input) { string tmp; while (cmdline >> tmp) { params.push_back (tmp); } //Ausführung mit Parameter if(params.size() >= 1) { string cmd; //Setzt alle Parameter zusammen for(int i=0; i <= params.size()-1; i++) { cmd += params[i] + " "; } string cut = cmd.substr(0,cmd.length()-1); //Befehl Übergabe exec(binPath); //....Wenn als Eingabe ein Befehl mit dem Zeichen '|' eingegeben wird, so wird die erste If-Abfrage gestartet sonst die zweite.
Ist es möglich die zweite If-Abfrage als Funktion zu erstellen, damit wenn die erste Abfrage gestartet wird die einzelnen Token an die Funktion zu übergeben, so muss ich nicht den halben Code nochmals in die erste Abfrage einbauen.
Nur ich weiß nicht wie ich das dann mit dem "cmdline >> input" machen sollte.Dann würde ich in der ersten Abfrage die Funktion so ausführen:
//suche das Trennzeichen if(str.find("|") != string::npos) { //Rückgabe der einzelnen token innerhalb des strings str vector<string> token = split(str,"|"); for(int i = 0; i < token.size(); i++) { exec(token[i]); } }Bitte um Hilfe
-
Klar kannst du das - am besten packst du den ganzen Kram aus dem zweiten if()-Block in deine Hilfsfunktion (inklusive des String-Streams), dann reduziert sich der else-Zweig zu einem "if(str.find("|")!=string::npos){...} else exec(str);"
(wobei du dir nur noch Gedanken machen mußt, wie du die Ausgaben von Kommando 1 an Kommando 2 weitergeben kannst)