<?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[Datei Zeile für Zeile auslesen]]></title><description><![CDATA[<p>Hallo ich habe folgende 2 Funktionen das was ich aus der Datei test.txt auslese will ich an die Funktion get übergeben. get soll die Daten nur als const char* empfangen können.</p>
<p>So habe ich das mal versucht umzusetzen. (Es funktioniert auch).</p>
<p>Aber kann man das nicht weniger umständlich lösen?<br />
Erst pack ich die Daten nach ZeilenChar dann nach ZeilenStr und letztendlich nochmal in den String Parameter1.</p>
<pre><code class="language-cpp">void get ( const char *data1 , const char *data2, const char *data3 )
{
	cout&lt;&lt;&quot;data1: &quot; &lt;&lt; data1 &lt;&lt; endl;
	cout&lt;&lt;&quot;data2: &quot; &lt;&lt; data2 &lt;&lt; endl;
	cout&lt;&lt;&quot;data3: &quot; &lt;&lt; data3 &lt;&lt; endl;
}

void test()
{
vector&lt;string&gt;ZeilenAlsStr(10);
vector&lt;char&gt;ZeilenChar(10);

string Parameter1;

ifstream file(&quot;test.txt&quot;);
int i=0;

	while ( !file.eof() )
	{
		file.getline( &amp;ZeilenChar[i],10); // 10 Zeichen pro Zeile auslesen
		ZeilenAlsStr[i] = &amp;ZeilenChar[i];
		i++;
	}

	Parameter1 = ZeilenAlsStr[0];
	cout&lt;&lt;&quot;str: &quot; &lt;&lt; Parameter1&lt;&lt;endl;
	get ( Parameter1.c_str() , &quot;0&quot;,&quot;0&quot; );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/300276/datei-zeile-für-zeile-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 21:13:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300276.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Feb 2012 11:01:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:01:52 GMT]]></title><description><![CDATA[<p>Hallo ich habe folgende 2 Funktionen das was ich aus der Datei test.txt auslese will ich an die Funktion get übergeben. get soll die Daten nur als const char* empfangen können.</p>
<p>So habe ich das mal versucht umzusetzen. (Es funktioniert auch).</p>
<p>Aber kann man das nicht weniger umständlich lösen?<br />
Erst pack ich die Daten nach ZeilenChar dann nach ZeilenStr und letztendlich nochmal in den String Parameter1.</p>
<pre><code class="language-cpp">void get ( const char *data1 , const char *data2, const char *data3 )
{
	cout&lt;&lt;&quot;data1: &quot; &lt;&lt; data1 &lt;&lt; endl;
	cout&lt;&lt;&quot;data2: &quot; &lt;&lt; data2 &lt;&lt; endl;
	cout&lt;&lt;&quot;data3: &quot; &lt;&lt; data3 &lt;&lt; endl;
}

void test()
{
vector&lt;string&gt;ZeilenAlsStr(10);
vector&lt;char&gt;ZeilenChar(10);

string Parameter1;

ifstream file(&quot;test.txt&quot;);
int i=0;

	while ( !file.eof() )
	{
		file.getline( &amp;ZeilenChar[i],10); // 10 Zeichen pro Zeile auslesen
		ZeilenAlsStr[i] = &amp;ZeilenChar[i];
		i++;
	}

	Parameter1 = ZeilenAlsStr[0];
	cout&lt;&lt;&quot;str: &quot; &lt;&lt; Parameter1&lt;&lt;endl;
	get ( Parameter1.c_str() , &quot;0&quot;,&quot;0&quot; );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2186933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186933</guid><dc:creator><![CDATA[MrUnwissend]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:16:50 GMT]]></title><description><![CDATA[<p>das sieht sehr nach rumgefrickel aus...</p>
<p>so könntest du es zum Beispiel (besser) machen:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; lines;
std::ifstream settingsIn(file.c_str());
while (settingsIn.good() &amp;&amp; !settingsIn.eof())
{
	std::string line;
	std::getline(settingsIn, line);
	lines.push_back(line);
}
</code></pre>
<p>greetz KN4CK3R</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186939</guid><dc:creator><![CDATA[KN4CK3R]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:22:12 GMT]]></title><description><![CDATA[<p>KN4CK3R schrieb:</p>
<blockquote>
<p>das sieht sehr nach rumgefrickel aus...</p>
<p>so könntest du es zum Beispiel (besser) machen:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; lines;
std::ifstream settingsIn(file.c_str());
while (settingsIn.good() &amp;&amp; !settingsIn.eof())
{
	std::string line;
	std::getline(settingsIn, line);
	lines.push_back(line);
}
</code></pre>
<p>greetz KN4CK3R</p>
</blockquote>
<p>Falsch.</p>
<pre><code class="language-cpp">string line;
while (std::getline(settingsIn, line))
 lines.push_back(line);
</code></pre>
<p>Erst Lesen, dann auf Fehler prüfen, dann verarbeiten. Sonst verarbeitest du bei Fehler (z.B. Dateiende) irgendwelchen Schrott.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186940</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:22:12 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:26:54 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">string line;
while (std::getline(settingsIn, line))
 lines.push_back(line);
</code></pre>
</blockquote>
<p>-&gt;</p>
<pre><code class="language-cpp">for(std::string line; std::getline(is, line);)
    lines.push_back(std::move(line));
</code></pre>
<p>:p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186943</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:35:59 GMT]]></title><description><![CDATA[<p>Na, dann aber auch:</p>
<pre><code class="language-cpp">for(std::string line; std::getline(is, line); lines.push_back(line));
</code></pre>
<p>~Das std::move lasse ich mal der Übersichtlichkeit halber weg. Es ändert auch nichts großartig an der Semantik (die bei KN4CK3R falsch war) sondern ist eher technischer Natur.~</p>
<p>P.S.: Eigentlich sieht das gar nicht so unelegant aus. Ich glaube, diese Konstruktion werde ich in Zukunft häufiger benutzen, um Leute zu verwirren und die Flexibilitat der for-Schleife zu demonstrieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186948</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:35:59 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:38:58 GMT]]></title><description><![CDATA[<p>Ich finde das push_back im Schleifenkörper schöner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186949</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:38:58 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:43:15 GMT]]></title><description><![CDATA[<p>Aber eine for-Schleife mit nur 2 von 3 möglichen Klauseln ist vergebenes Potential! <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186950</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 11:50:33 GMT]]></title><description><![CDATA[<p>Na gut, überzeugt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186953</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 29 Feb 2012 11:50:33 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 12:09:26 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe.</p>
<p>Zu cin&gt;&gt; habe ich noch eine Frage:</p>
<p>Wenn ich jetzt hier über cin etwas in cmd einlese und Enter drücke dann Ignoriert mein Programm einfach das getline(cin,z1); <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich hab jetzt nach dem cin&gt;&gt;cmd; einfach ein cin.syc(); gesetzt dann wird mein getline auch nicht ignoriert. Aber wieso ignoriert der PC das einfach wenn ich kein cin.sync(); benutze?</p>
<pre><code class="language-cpp">string cmd;
string z1;

cout&lt;&lt;&quot;cmd: &quot;;
cin&gt;&gt;cmd;
cin.sync();

cout&lt;&lt;&quot;z1: &quot; ;
getline(cin,z1);

cout&lt;&lt;z1&lt;&lt;endl;
cout&lt;&lt;cmd&lt;&lt;endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2186958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186958</guid><dc:creator><![CDATA[MrUnwissen]]></dc:creator><pubDate>Wed, 29 Feb 2012 12:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 12:48:55 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">string line;
while (std::getline(settingsIn, line))
 lines.push_back(line);
</code></pre>
</blockquote>
<p>-&gt;</p>
<pre><code class="language-cpp">for(std::string line; std::getline(is, line);)
    lines.push_back(std::move(line));
</code></pre>
<p>:p</p>
</blockquote>
<p>Ist eigentlich garantiert, das man in den String noch schreiben kann, nach einem Move? Weil getline muss ja in den String schreiben ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186970</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Wed, 29 Feb 2012 12:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to Datei Zeile für Zeile auslesen on Wed, 29 Feb 2012 13:05:49 GMT]]></title><description><![CDATA[<p>MrUnwissen schrieb:</p>
<blockquote>
<p>Danke für die Hilfe.</p>
<p>Zu cin&gt;&gt; habe ich noch eine Frage:</p>
<p>Wenn ich jetzt hier über cin etwas in cmd einlese und Enter drücke dann Ignoriert mein Programm einfach das getline(cin,z1); <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Nix ignorieren. Computer irren sich nicht. Das Ergebnis ist bloß eine leere Eingabe, da der Operator&gt;&gt; bis zum nächsten Whitespace liest (und diesen nicht mitliest), getline hingegen liest bis einschließlich dem nächsten Zeilenumbruch (welcher als Whitespace gilt). Wenn du nun also nach einem Operator&gt;&gt; ein getline benutzt und der Operator&gt;&gt; bei einem Zeilenumbruch mit dem Lesen aufgehört hat, dann liest das getline genau gar nichts ein, da es sofort einen Zeilenumbruch findet.</p>
<blockquote>
<p>Ich hab jetzt nach dem cin&gt;&gt;cmd; einfach ein cin.syc(); gesetzt dann wird mein getline auch nicht ignoriert. Aber wieso ignoriert der PC das einfach wenn ich kein cin.sync(); benutze?</p>
</blockquote>
<p>Auf deinem System mag sync() so implementiert sein, dass es da irgendwelche Zeichen aus dem Stream löscht. Ist aber nicht portabel, benutz sync daher nicht, um Eingabepuffer zu leeren. Falls du alles bis einschließlich dem nächsten Zeilenumbruch löschen möchtest, dann bastel dir etwas mit ignore.</p>
<p>Diese Frage und Konstrukte wie man es richtig macht, kommt hier ungefähr einmal pro Tag. Gestern gab es mindestens zwei Threads dazu, die du noch leicht finden solltest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186975</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 29 Feb 2012 13:05:49 GMT</pubDate></item></channel></rss>