<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Probleme mit Streams...]]></title><description><![CDATA[<p>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.:</p>
<pre><code>&gt;kill winamp.exe | counter 12 shutdown
</code></pre>
<p>Hier erstmal die Eingabe:</p>
<pre><code class="language-cpp">//Befehl mit Parameter einlesen
getline(cin, str);

istringstream cmdline (str);
string input;
vector&lt;string&gt; params;

//suche das Trennzeichen
if(str.find(&quot;|&quot;) != string::npos)
{
//Rückgabe der einzelnen token innerhalb des strings str
vector&lt;string&gt; token = split(str,&quot;|&quot;);

for(int i = 0; i &lt; token.size(); i++)
{						
	cout &lt;&lt; token[i] &lt;&lt; endl;	
}
}

else if(cmdline &gt;&gt; input) 
{						
string tmp;
while (cmdline &gt;&gt; tmp) 
{
	params.push_back (tmp);
}

	//Ausführung mit Parameter
	if(params.size() &gt;= 1)
	{
		string cmd; 

		//Setzt alle Parameter zusammen
		for(int i=0; i &lt;= params.size()-1; i++)
		{
			cmd += params[i] + &quot; &quot;;
		}							
		string cut = cmd.substr(0,cmd.length()-1);	

	        //Befehl Übergabe
		exec(binPath);

               //....
</code></pre>
<p>Wenn als Eingabe ein Befehl mit dem Zeichen '|' eingegeben wird, so wird die erste If-Abfrage gestartet sonst die zweite.<br />
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.<br />
Nur ich weiß nicht wie ich das dann mit dem &quot;cmdline &gt;&gt; input&quot; machen sollte.</p>
<p>Dann würde ich in der ersten Abfrage die Funktion so ausführen:</p>
<pre><code class="language-cpp">//suche das Trennzeichen
if(str.find(&quot;|&quot;) != string::npos)
{
//Rückgabe der einzelnen token innerhalb des strings str
vector&lt;string&gt; token = split(str,&quot;|&quot;);

for(int i = 0; i &lt; token.size(); i++)
{						
	exec(token[i]);	

}
}
</code></pre>
<p>Bitte um Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160962/probleme-mit-streams</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 17:33:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160962.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Oct 2006 19:07:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Streams... on Sun, 01 Oct 2006 19:07:28 GMT]]></title><description><![CDATA[<p>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.:</p>
<pre><code>&gt;kill winamp.exe | counter 12 shutdown
</code></pre>
<p>Hier erstmal die Eingabe:</p>
<pre><code class="language-cpp">//Befehl mit Parameter einlesen
getline(cin, str);

istringstream cmdline (str);
string input;
vector&lt;string&gt; params;

//suche das Trennzeichen
if(str.find(&quot;|&quot;) != string::npos)
{
//Rückgabe der einzelnen token innerhalb des strings str
vector&lt;string&gt; token = split(str,&quot;|&quot;);

for(int i = 0; i &lt; token.size(); i++)
{						
	cout &lt;&lt; token[i] &lt;&lt; endl;	
}
}

else if(cmdline &gt;&gt; input) 
{						
string tmp;
while (cmdline &gt;&gt; tmp) 
{
	params.push_back (tmp);
}

	//Ausführung mit Parameter
	if(params.size() &gt;= 1)
	{
		string cmd; 

		//Setzt alle Parameter zusammen
		for(int i=0; i &lt;= params.size()-1; i++)
		{
			cmd += params[i] + &quot; &quot;;
		}							
		string cut = cmd.substr(0,cmd.length()-1);	

	        //Befehl Übergabe
		exec(binPath);

               //....
</code></pre>
<p>Wenn als Eingabe ein Befehl mit dem Zeichen '|' eingegeben wird, so wird die erste If-Abfrage gestartet sonst die zweite.<br />
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.<br />
Nur ich weiß nicht wie ich das dann mit dem &quot;cmdline &gt;&gt; input&quot; machen sollte.</p>
<p>Dann würde ich in der ersten Abfrage die Funktion so ausführen:</p>
<pre><code class="language-cpp">//suche das Trennzeichen
if(str.find(&quot;|&quot;) != string::npos)
{
//Rückgabe der einzelnen token innerhalb des strings str
vector&lt;string&gt; token = split(str,&quot;|&quot;);

for(int i = 0; i &lt; token.size(); i++)
{						
	exec(token[i]);	

}
}
</code></pre>
<p>Bitte um Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1147578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1147578</guid><dc:creator><![CDATA[kernel64]]></dc:creator><pubDate>Sun, 01 Oct 2006 19:07:28 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Streams... on Wed, 04 Oct 2006 06:16:51 GMT]]></title><description><![CDATA[<p>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 &quot;if(str.find(&quot;|&quot;)!=string::npos){...} else exec(str);&quot;</p>
<p>(wobei du dir nur noch Gedanken machen mußt, wie du die Ausgaben von Kommando 1 an Kommando 2 weitergeben kannst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148975</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 04 Oct 2006 06:16:51 GMT</pubDate></item></channel></rss>