<?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[Ständige Exception beim String splitten]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich versuche eine Linie die einzelne Wörter beinhaltet (getrennt mit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> zu splitten.<br />
Dazu habe ich einen vector&lt;string&gt; erstellt, der dann die einzelnen Wörter &quot;bekommen&quot; soll.</p>
<p>JEdoch bekomme ich ständig eine Exception bei der Übergabe:</p>
<pre><code class="language-cpp">ifstream fHandle; // Textfile Handle
	string LineBuffer; // Buffer
	vector&lt;vector&lt;string&gt;&gt; vData;

// [...]

while(!fHandle.eof())
	{
		getline(fHandle, LineBuffer);
		printf(&quot;\t linecontent: [%s]\n&quot;,  LineBuffer.c_str());
		Tokenize(LineBuffer, vData[VectorIndex++]); // Split each line in single words &lt;-- hier krachts (bei der Übergabe)
		printf(&quot;\t Data successfully splitted.\n &quot;);
	}
</code></pre>
<pre><code class="language-cpp">VOID Tokenize(const string&amp; str, vector&lt;string&gt;&amp; tokens)
{
	string delimiters = &quot;;&quot;;
	printf(&quot;\t\tInside the tokenize routine\n.&quot;);

    // Skip delimiters at beginning.
    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
	printf(&quot;\t\tdelimiter skipping\n.&quot;);
    // Find first &quot;non-delimiter&quot;.
    string::size_type pos     = str.find_first_of(delimiters, lastPos);
	printf(&quot;\t\tlooking for the first non-delimiter\n.&quot;);

    while (string::npos != pos || string::npos != lastPos)
    {
        // Found a token, add it to the vector.
        tokens.push_back(str.substr(lastPos, pos - lastPos));
        // Skip delimiters.  Note the &quot;not_of&quot;
        lastPos = str.find_first_not_of(delimiters, pos);
        // Find next &quot;non-delimiter&quot;
        pos = str.find_first_of(delimiters, lastPos);
    }
}
</code></pre>
<p>Ich hoffe ihr könnt mir helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265449/ständige-exception-beim-string-splitten</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 16:41:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265449.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Apr 2010 07:11:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 07:11:34 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich versuche eine Linie die einzelne Wörter beinhaltet (getrennt mit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> zu splitten.<br />
Dazu habe ich einen vector&lt;string&gt; erstellt, der dann die einzelnen Wörter &quot;bekommen&quot; soll.</p>
<p>JEdoch bekomme ich ständig eine Exception bei der Übergabe:</p>
<pre><code class="language-cpp">ifstream fHandle; // Textfile Handle
	string LineBuffer; // Buffer
	vector&lt;vector&lt;string&gt;&gt; vData;

// [...]

while(!fHandle.eof())
	{
		getline(fHandle, LineBuffer);
		printf(&quot;\t linecontent: [%s]\n&quot;,  LineBuffer.c_str());
		Tokenize(LineBuffer, vData[VectorIndex++]); // Split each line in single words &lt;-- hier krachts (bei der Übergabe)
		printf(&quot;\t Data successfully splitted.\n &quot;);
	}
</code></pre>
<pre><code class="language-cpp">VOID Tokenize(const string&amp; str, vector&lt;string&gt;&amp; tokens)
{
	string delimiters = &quot;;&quot;;
	printf(&quot;\t\tInside the tokenize routine\n.&quot;);

    // Skip delimiters at beginning.
    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
	printf(&quot;\t\tdelimiter skipping\n.&quot;);
    // Find first &quot;non-delimiter&quot;.
    string::size_type pos     = str.find_first_of(delimiters, lastPos);
	printf(&quot;\t\tlooking for the first non-delimiter\n.&quot;);

    while (string::npos != pos || string::npos != lastPos)
    {
        // Found a token, add it to the vector.
        tokens.push_back(str.substr(lastPos, pos - lastPos));
        // Skip delimiters.  Note the &quot;not_of&quot;
        lastPos = str.find_first_not_of(delimiters, pos);
        // Find next &quot;non-delimiter&quot;
        pos = str.find_first_of(delimiters, lastPos);
    }
}
</code></pre>
<p>Ich hoffe ihr könnt mir helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887068</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Fri, 23 Apr 2010 07:11:34 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 07:44:48 GMT]]></title><description><![CDATA[<p>1. Wieso <code>printf</code> und nicht <code>std::cout</code> ?<br />
2. Du liest die letzte Zeile doppelt ein. Das Flag eofbit wird erst gesetzt, wenn einmal ein Versuch stattgefunden hat (Verangenheitsform), über das Ende zu lesen. Mach es lieber so:</p>
<pre><code class="language-cpp">while(std::getline(input, buffer))
{
  // ...
}
</code></pre>
<p>std::getline liefert den std::istream als Referenz zurück. std::istream kann man direkt prüfen, ob er noch gültig ist. Somit prüfst du gleich nach der Leseoperation, ob ein Fehler aufgetreten ist, bzw. alles noch in Ordnung ist.<br />
3. Wo hast du <code>vData</code> Speicher reservieren lassen?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887084</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 23 Apr 2010 07:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 08:19:27 GMT]]></title><description><![CDATA[<p>Hallo Dravere,</p>
<p>1. Das sind lediglich Debug Ausgaben.. Ich lösch die nach dem ich das Problem gelöst habe wieder. Wobei du schon recht hast, dass ich dann wirklich auf C++ Synta zugreiffen müsste.</p>
<p>2. Ich habe das jetzt mal so implementiert, danke!</p>
<p>3. Whoops, jetzt wo dus sagst seh ichs auch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Da ich eher mit C# arbeite ist das natürlich noch ungewohnt.<br />
Das ging mit malloc() richtig?</p>
<pre><code class="language-cpp">malloc(sizeof(vector&lt;vector&lt;string&gt;&gt;));
</code></pre>
<p>?</p>
<p>Wie muss ich das genau vData zuordnen?</p>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887102</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Fri, 23 Apr 2010 08:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 08:37:13 GMT]]></title><description><![CDATA[<p>Darfst/kannst du die boost Bibliotheken benutzen?</p>
<p>In C++ Programmen benutzt man eigentlich kein malloc(), und auch new/delete für Datenobjekte sind eher selten, wenn man die STL benutzt. Dir scheint noch einiges an C++ Grundlagen zu fehlen, insbesondere die Konstruktion von Objekten bzw. Speicherverwaltung.</p>
<p>Was du machen kannst ist Folgendes:</p>
<pre><code class="language-cpp">vector&lt;vector&lt;string&gt; &gt; vData;

while( getline(fHandle, LineBuffer) )
{
   // lokales Objekt zur Aufnahme der Token der aktuellen Zeile
   vector&lt;string&gt; Token;

   // Zeile bearbeiten
   Tokenize( LineBuffer, Token );

   // Token in Vektor aller Token einfügen
   vData.push_back( Token );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1887106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887106</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 23 Apr 2010 08:37:13 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 08:38:36 GMT]]></title><description><![CDATA[<p>fiorn schrieb:</p>
<blockquote>
<p>Das ging mit malloc() richtig?</p>
<pre><code class="language-cpp">malloc(sizeof(vector&lt;vector&lt;string&gt;&gt;));
</code></pre>
<p>?</p>
</blockquote>
<p>Nein! Damit allokierst du den Speicher für das vector-Object, aber nicht für den Inhalt. Dein Fehler liegt bei <code>vData[VectorIndex++]</code> , da du da auf einen Index zugreifst, der noch nicht existiert. Ein vector kann aber dynamisch wachsen.</p>
<p>Mach es so:</p>
<pre><code class="language-cpp">//...
vData.push_back(); // Neuen (zunächst leeren) vector ans Ende von vData anhängen
Tokenize(LineBuffer, vData.back()); // Auf letzten Eintrag (ist der gerade zugefügte leere vector) zugreifen
//...

// Oder alternativ:

//...
vector&lt;string&gt; vec; // Neuen leeren vector anlegen
Tokenize(LineBuffer, vec); // vector füllen
vData.push_back(vec); // gefüllten vector an vData anhängen
//...
</code></pre>
<p>Die erste Variante dürfte aber imho performanter sein, weil da das Kopieren der Vectorelemente beim <code>push_back(vec)</code> entfällt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887108</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 23 Apr 2010 08:38:36 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 08:44:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16077">@ipsec</a>,<br />
Nur gibt es keine parameterlose <code>push_back</code> Methode <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Und ob es wirklich so viel performanter ist, würde ich nicht einfach so annehmen. Der Kompiler darf schliesslich optimieren und wenn keine Seiteneffekt entfallen, kann er auch ein paar Kopien erledigen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887112</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 23 Apr 2010 08:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 09:04:23 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>Danke für eure Antworten die erste Exception ist weg. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Jedoch will er mit das Zeugs komischerweise nicht splitten.</p>
<p>Der Code sieht jetzt so aus:</p>
<pre><code class="language-cpp">while(getline(fHandle, LineBuffer))
	{
		vector&lt;string&gt; Token;

		printf(&quot;\t Line got [%s]\n&quot;,  LineBuffer.c_str());
		Tokenize(LineBuffer, Token); // Split each line in single words
		/**** DBG ****/
		for(int Idx=0;Idx&lt;5;Idx++)
		{
			printf(&quot;%s -&gt; &quot;, Token[Idx]); 
		}
		/** DBG END **/
		vData.push_back(Token);
		printf(&quot;\n\t Data successfully splitted.\n &quot;);
	}
</code></pre>
<p>Ausgabe auf der Console:</p>
<pre><code>Line got [Etat;Demandes;RΘsultats;Entretien;Configuration]
(null) -&gt; (null) -&gt; (null) -&gt; (null) -&gt; (null) -&gt;
         Data successfully splitted.
</code></pre>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887120</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Fri, 23 Apr 2010 09:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 09:25:22 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16077">@ipsec</a>,<br />
Nur gibt es keine parameterlose <code>push_back</code> Methode <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ups <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Mir war so, als hätte die T() als Default-Argument.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887130</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Fri, 23 Apr 2010 09:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 10:39:46 GMT]]></title><description><![CDATA[<p>.. kann mir mal einer sagen, wieso keiner auf die Idee kommt, die Wörter einfach von dem ifstream einzulesen. Wenn sie mit ';' getrennt sind, geht das doch mit einfach mit</p>
<pre><code class="language-cpp">ifstream fHandle; // Textfile Handle // der Name 'fHandle' ist hier etwas irreführend
    for( string wort; getline( fHandle, wort, ';' ); )
        tokens.push_back( wort );
</code></pre>
<p>bleibt nur noch mit fiorn zu klären, ob die Schachtelung des vector&lt; vector&lt;&gt; &gt; an die Zeilen gebunden ist oder ob das auch ohne geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887167</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Fri, 23 Apr 2010 10:39:46 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 10:40:59 GMT]]></title><description><![CDATA[<p>1. Dein <code>printf</code> in der Debug-For-Schleife erzeugt undefiniertes Verhalten. Genau deswegen würde ich auf <code>printf</code> verzichten.<br />
2. Deine Debug-For-Schleife geht immer über 5 Elemente. Wieso nicht sicherheitshalber gleich die Grösse des <code>std::vector</code> verwenden? Mehraufwand gleich 0, Sicherheit hoch 10.<br />
3. Zum eigentlichen Problem: Wenn du ein Semikolon an der Position x findest und danach an der Position x startest, um das nächste Semikolon zu finden, wirst du wieder die Position x zurückbekommen. Mit all deinen Suchfunktionen gehst du nie einen Schritt weiter, sondern findest immer das erste Semikolon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887168</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 23 Apr 2010 10:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 10:42:40 GMT]]></title><description><![CDATA[<p>Werner_logoff schrieb:</p>
<blockquote>
<p>.. kann mir mal einer sagen, wieso keiner auf die Idee kommt, die Wörter einfach von dem ifstream einzulesen.</p>
</blockquote>
<p>Weil niemand die Dokumentation liest und viele auch von den C++ Streams ein wenig überfordert sind <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887169</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 23 Apr 2010 10:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 11:15:08 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>1. Dein <code>printf</code> in der Debug-For-Schleife erzeugt undefiniertes Verhalten. Genau deswegen würde ich auf <code>printf</code> verzichten.<br />
2. Deine Debug-For-Schleife geht immer über 5 Elemente. Wieso nicht sicherheitshalber gleich die Grösse des <code>std::vector</code> verwenden? Mehraufwand gleich 0, Sicherheit hoch 10.<br />
3. Zum eigentlichen Problem: Wenn du ein Semikolon an der Position x findest und danach an der Position x startest, um das nächste Semikolon zu finden, wirst du wieder die Position x zurückbekommen. Mit all deinen Suchfunktionen gehst du nie einen Schritt weiter, sondern findest immer das erste Semikolon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
</blockquote>
<p>Hm.. des Problems Ursache habe ich wohl schon gefunden.<br />
Die Zeile der Textdatei wird ja richtig eingelesen.<br />
Wenn ich dann aber in der Funktion den übergebenen Buffer auslesen will</p>
<pre><code class="language-cpp">while (string::npos != pos || string::npos != lastPos)
    {
		printf(&quot;INSIDE\n&quot;);
		//printf(&quot;
		//printf(&quot;%s\n&quot;, str.substr(lastPos, pos - lastPos));
        // Found a token, add it to the vector.
		printf(&quot;%i, %i \n&quot;, pos, lastPos);
		printf(&quot;%s \n&quot;, str);
</code></pre>
<p>(unterste Zeile), wirft er mir sofort eine Exception.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7393">@werner</a><br />
Hmm.. Wie gehst du da das ganze Textfile durch?<br />
Bzw. wo werden die einzelnen vector&lt;string&gt; in vData gespeichert?</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887193</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Fri, 23 Apr 2010 11:15:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 11:24:31 GMT]]></title><description><![CDATA[<p>fiorn schrieb:</p>
<blockquote>
<p>(unterste Zeile), wirft er mir sofort eine Exception.</p>
</blockquote>
<p>Da dies eine C Funktion ist, kann sie keine Exception werfen, sondern dein Debugger meldet sich wahrscheinlich, weil du undefiniertes Verhalten auslöst. Das habe ich schon in Punkt 1 erwähnt und wieso deine Funktion nicht geht, steht in Punkt 3.</p>
<p>Und zur Lösung von Werner:<br />
Du könntest schon ein wenig mehr Eigenintiative zeigen. Schau doch zumindest in der Referenz nach, was da geschieht. Man kann fast nicht mehr zu dieser Lösung sagen, sonst schreibt man gleich den ganzen Algorithmus hin.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887204</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 23 Apr 2010 11:24:31 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 12:10:11 GMT]]></title><description><![CDATA[<p>fiorn schrieb:</p>
<blockquote>
<p>Hmm.. Wie gehst du da das ganze Textfile durch?<br />
Bzw. wo werden die einzelnen vector&lt;string&gt; in vData gespeichert?</p>
</blockquote>
<p>Na ja - das war die Frage nach den verschachtelten Vectoren (s.o.). Aus Deinem vorhergehenden Posting schließe ich, dass das letzte Wort nicht mit ';' beendet wird und das die Anzahl der Wörter pro Datensatz fest ist (==6?) Dann geht das mit C++Standard-Einlese-Methoden zum Beispiel so:</p>
<pre><code class="language-cpp">std::istream&amp; getTokens( std::istream&amp; in, std::vector&lt; std::string &gt;&amp; tokens_, int n )
{
    using namespace std;
    vector&lt; string &gt; tokens;
    string token;
    for( ; n &gt; 1 &amp;&amp; getline( in, token, ';' ); --n ) // n-1 mal 'token;' lesen
        tokens.push_back( token );
    if( getline( in, token ) ) // letzten Token am Ende der Zeile einlesen
        swap( tokens, tokens_ ); // Ok?  dann Ergebnis übenehmen
    return in;
}

int main()
{
    using namespace std;
    vector&lt; vector&lt; string &gt; &gt; vdata;
    ifstream fHandle( &quot;Datei.txt&quot; );
    for( vector&lt; string &gt; tokens; getTokens( fHandle, tokens, 6 );  )
        vdata.push_back( tokens );
    if( fHandle.eof() )
    {
        // Ok - bis zum Dateiende gelesen
        cout &lt;&lt; vdata.size() &lt;&lt; &quot; Datensaetze gelesen&quot; &lt;&lt; endl;
    }
</code></pre>
<p>fiorn schrieb:</p>
<blockquote>
<p>Und zur Lösung von Werner:<br />
Du könntest schon ein wenig mehr Eigenintiative zeigen. Schau doch zumindest in der Referenz nach, was da geschieht. Man kann fast nicht mehr zu dieser Lösung sagen, sonst schreibt man gleich den ganzen Algorithmus hin.</p>
</blockquote>
<p>Stimmt (s.o.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887237</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Fri, 23 Apr 2010 12:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 12:15:38 GMT]]></title><description><![CDATA[<p>Werner_logoff schrieb:</p>
<blockquote>
<p>fiorn schrieb:</p>
<blockquote>
<p>Und zur Lösung von Werner:<br />
Du könntest schon ein wenig mehr Eigenintiative zeigen. Schau doch zumindest in der Referenz nach, was da geschieht. Man kann fast nicht mehr zu dieser Lösung sagen, sonst schreibt man gleich den ganzen Algorithmus hin.</p>
</blockquote>
<p>Stimmt (s.o.)</p>
</blockquote>
<p>Zwei Sachen:<br />
1. Du hast falsch zitiert.<br />
2. Das war nicht auf dich bezogen, sondern auf fiorn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887246</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 23 Apr 2010 12:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 12:59:43 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich muss mich wohl schon fast entschuldigen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Ich hätte am Anfang auf 'Dravere' hören sollen, und auch wenns nur Debug Outputs sind trotzdem 'cout' verwenden.</p>
<p>Ich habe die Ausgabe von printf falsch interpretiert.<br />
mit cout kommen dann schon die richtigen Worte raus.<br />
Und die Exception kam darum weil ich hier:</p>
<pre><code class="language-cpp">copy(vData[outerloop].begin(), vData[outerloop].end(), Titel.begin());
</code></pre>
<p>zuerst den VektorArray &quot;Titel&quot; nicht vergrössert habe.</p>
<p>Das Programm funktioniert jetzt schön und gut, nur habe ich nun einen wirklich SEHR komischen Fehler.</p>
<p>Wenn in der Titelzeile nun nicht 1 Wort sondern mehrere Wörter stehen (im italienischen stehen bspw für einen Ausdruck 3 Wörter) schmiert mein Programm hab.</p>
<p>Nun, das willkürliche daran ist folgendes:<br />
Das Programm läuft die Routine wo es das Textfile auswertet perfekt durch.</p>
<pre><code class="language-cpp">// Evalute the language file
	LoadLanguage(sLanguagePath);
	cout &lt;&lt; &quot;finished&quot; &lt;&lt; endl;
</code></pre>
<p>LoadLanguage(sLanguagePath) wird ohne Fehler abgeschlossen, jedoch wird die nachricht &quot;finished&quot; nicht mehr auf der Console ausgegeben, stattdessen erscheint die Excpetion: &quot;The instruction at &quot;0x785718a8&quot; referenced memory at &quot;0x65746e49&quot;. The memory could not be &quot;read&quot;.&quot;</p>
<p>Ich habe ehrlich gesagt KEINE Ahnung wie es dazu kommt, dass er mir die Konsolenausgabe nicht mehr machen will.</p>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887278</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Fri, 23 Apr 2010 12:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 13:09:13 GMT]]></title><description><![CDATA[<p>fiorn schrieb:</p>
<blockquote>
<p>Ich habe ehrlich gesagt KEINE Ahnung wie es dazu kommt, dass er mir die Konsolenausgabe nicht mehr machen will.</p>
</blockquote>
<p>Weisst darauf hin, dass du noch irgendwo anderes undefiniertes Verhalten auslöst. Wenn du über Speichergrenzen hinweg schreibst, schreibst du in irgendwelchen anderen Speicher in deinem Programm rein. Die Fehler davon können sich erst viel später zeigen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887296</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 23 Apr 2010 13:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to Ständige Exception beim String splitten on Fri, 23 Apr 2010 13:50:48 GMT]]></title><description><![CDATA[<p>Aber warum nur bei einem Ausdruck der aus 3 Worten besteht?<br />
Ich splitte m.W. nur nach Semikolon, und nicht nach &quot; &quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1887308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1887308</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Fri, 23 Apr 2010 13:50:48 GMT</pubDate></item></channel></rss>