<?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[[gelöst] Mit Stream-Extraction Operatoren lesen und gleichzeitig End-Of-Line mitbekommen?]]></title><description><![CDATA[<p>Sollte mMn. eigentlich eine ganz einfache Sache sein, ich weiss aber keine einfache, gute Lösung.<br />
Angenommen wir haben ein File wo Zeilen mit &quot;Zahlenwürsten&quot; drinnen stehen:</p>
<pre><code>8 2 1 92 100 2
1 2
99 100 33 2 1 0 0 0 4
...
</code></pre>
<p>Dieses File soll mittels C++ iostreams eingelesen werden.<br />
Das lesende Programm muss dabei allerdings die Zeilenumbrüche mitbekommen.</p>
<p>Wie macht man das am elegantesten?</p>
<p>Einfache (aber sehr ineffiziente und IMO nicht sehr elegante) Variante: <code>getline()</code> verwenden um die Zeilen in einen <code>std::string</code> zu lesen, dann einen <code>std::stringstream</code> daraus machen und über diesen dann die einzelnen Integers lesen.</p>
<p>Ich meine aber dass das irgendwie besser gehen müsste.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316061/gelöst-mit-stream-extraction-operatoren-lesen-und-gleichzeitig-end-of-line-mitbekommen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 23:27:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316061.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Apr 2013 14:14:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] Mit Stream-Extraction Operatoren lesen und gleichzeitig End-Of-Line mitbekommen? on Sat, 20 Apr 2013 17:57:58 GMT]]></title><description><![CDATA[<p>Sollte mMn. eigentlich eine ganz einfache Sache sein, ich weiss aber keine einfache, gute Lösung.<br />
Angenommen wir haben ein File wo Zeilen mit &quot;Zahlenwürsten&quot; drinnen stehen:</p>
<pre><code>8 2 1 92 100 2
1 2
99 100 33 2 1 0 0 0 4
...
</code></pre>
<p>Dieses File soll mittels C++ iostreams eingelesen werden.<br />
Das lesende Programm muss dabei allerdings die Zeilenumbrüche mitbekommen.</p>
<p>Wie macht man das am elegantesten?</p>
<p>Einfache (aber sehr ineffiziente und IMO nicht sehr elegante) Variante: <code>getline()</code> verwenden um die Zeilen in einen <code>std::string</code> zu lesen, dann einen <code>std::stringstream</code> daraus machen und über diesen dann die einzelnen Integers lesen.</p>
<p>Ich meine aber dass das irgendwie besser gehen müsste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317004</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 20 Apr 2013 17:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mit Stream-Extraction Operatoren lesen und gleichzeitig End-Of-Line mitbekommen? on Sat, 20 Apr 2013 14:33:00 GMT]]></title><description><![CDATA[<p>Vielleicht so:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

int main(){
    std::ifstream stream(&quot;yowassup&quot;);
    int integer;
    char next;

    while(stream.get(next)){
        if(next == '\n')
            std::cout &lt;&lt; &quot;newline! :0\n&quot;;
        else{
            stream &gt;&gt; integer;
            std::cout &lt;&lt; integer &lt;&lt; ' ';
        }
    }

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317010</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 20 Apr 2013 14:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mit Stream-Extraction Operatoren lesen und gleichzeitig End-Of-Line mitbekommen? on Sat, 20 Apr 2013 14:39:24 GMT]]></title><description><![CDATA[<p>Was hällst du davon?</p>
<pre><code>int main()
{
	ifstream file( &quot;test.txt&quot; );
	vector&lt;unsigned&gt; numbers;
	unsigned line_breaks = 0;

	for(unsigned i;;)
	{
		file &gt;&gt; std::noskipws &gt;&gt; i;

		if( !file )
		{
			if( file.eof() )
				break;

			file.clear();
			char tmp;
			file &gt;&gt; tmp;
			if( tmp=='\n' || tmp=='\r' )
				++line_breaks;
		}
		else
		{
			numbers.push_back( i );
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317011</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Sat, 20 Apr 2013 14:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mit Stream-Extraction Operatoren lesen und gleichzeitig End-Of-Line mitbekommen? on Sat, 20 Apr 2013 14:56:35 GMT]]></title><description><![CDATA[<p>Ich korrigiere mich:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;

int main(){
    std::ifstream stream(&quot;file&quot;);
    int integer, x;
    char next;

    while(stream.get(next)){
        if(next == '\n')
            std::cout &lt;&lt; &quot;newline! :0\n&quot;;
        else{
            x = stream.tellg();
            stream.seekg(--x, std::ios::beg);

            stream &gt;&gt; integer;
            std::cout &lt;&lt; integer &lt;&lt; ' ';
        }
    }

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2317015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317015</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 20 Apr 2013 14:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mit Stream-Extraction Operatoren lesen und gleichzeitig End-Of-Line mitbekommen? on Sat, 20 Apr 2013 15:00:28 GMT]]></title><description><![CDATA[<p>Hallo hustbaer,</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Dieses File soll mittels C++ iostreams eingelesen werden.<br />
Das lesende Programm muss dabei allerdings die Zeilenumbrüche mitbekommen.</p>
</blockquote>
<p>Du bist wahrlich nicht der erste, der dieses Problem hat. Zeilenumbrüche und Leerzeichen sind halt beides White Space Character und werden vom std::istream nicht so ohne weiteres unterschieden.</p>
<p>Ich hatte mal ein <a href="http://www.c-plusplus.net/forum/p1940874" rel="nofollow">kleines Helferlein 'is_endl'</a> gebaut - damit geht es dann relativ straightforward:</p>
<pre><code>#include &quot;is_endl.h&quot; // s. &lt;http://www.c-plusplus.net/forum/p1940874&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

int main()
{
    using namespace std;
    ifstream in(&quot;input.txt&quot;);
    if( !in.is_open() )
    {
        cerr &lt;&lt; &quot;Fehler beim Oeffnen der Datei&quot; &lt;&lt; endl;
        return -2;
    }
    vector&lt; vector&lt; int &gt; &gt; alles;
    while( in )
    {
        vector&lt; int &gt; zahlenwurst;
        for( int zahl; !is_endl(in) &amp;&amp; in &gt;&gt; zahl; )
            zahlenwurst.push_back( zahl );
        if( in || !zahlenwurst.empty()  )
            alles.push_back( zahlenwurst );
    }
    cout &lt;&lt; alles.size() &lt;&lt; &quot; Zahlenwuerste gelesen&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>die anderen gemachten Vorschläge funktionieren nicht, wenn hinter der letzten Zahl einer Zeile noch ein Leerzeichen steht oder wenn Leerzeilen vorkommen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317018</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 20 Apr 2013 15:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] Mit Stream-Extraction Operatoren lesen und gleichzeitig End-Of-Line mitbekommen? on Sat, 20 Apr 2013 16:45:55 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Hallo hustbaer,</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Dieses File soll mittels C++ iostreams eingelesen werden.<br />
Das lesende Programm muss dabei allerdings die Zeilenumbrüche mitbekommen.</p>
</blockquote>
<p>Du bist wahrlich nicht der erste, der dieses Problem hat. Zeilenumbrüche und Leerzeichen sind halt beides White Space Character und werden vom std::istream nicht so ohne weiteres unterschieden.</p>
</blockquote>
<p>Ja, gerade weil ich ganz sicher nicht der erste bin der das braucht hat es mich auch so gewundert dass es keine straight-forward Lösung dafür zu geben scheint.<br />
Ausser eben die <code>getline() + stringstream</code> Variante.</p>
<blockquote>
<p>Ich hatte mal ein <a href="http://www.c-plusplus.net/forum/p1940874" rel="nofollow">kleines Helferlein 'is_endl'</a> gebaut - damit geht es dann relativ straightforward:</p>
</blockquote>
<p>Dankeeeeeeee! <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2317041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2317041</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 20 Apr 2013 16:45:55 GMT</pubDate></item></channel></rss>