<?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[Frage zu fstream.eof()]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe folgendes Problem: Ich will eine Tebelle, die in einem txt-file abgelegt ist auslesen und in einen 2D-Array speichern. Ich weiss zu Beginn jedoch nicht, wieviele Zeilen und wieviele Spalten die Tabelle hat. Deshalb lese ich die Tabelle zweimal ein, um beim ersten mal die Anzahl Zeieln und die maximale Anzahl Spalten zu ermitteln. Anschliessend initialisiere ich das Array und fülle es dann in einer zweiten Schlaufe. Hier mein Code (halt Anfängercode):</p>
<pre><code class="language-cpp">vector&lt; vector&lt;double&gt; &gt; Mat;

	int max_columns=0;
	int row_counter = 0;
	int column_counter = 0;

	infile.open(&quot;D:\\petersp\\Master-Arbeit DLD\\PF_2D\\properties_C35.txt&quot;, ios::in);

	if (infile.is_open())
	{
		while(!infile.eof())
		{
			getline(infile, s);
			row_counter++;
			size_t pos = s.find(&quot;\t&quot;);
			vector&lt;double&gt; value;
			column_counter = 0;

			while(pos != s.npos)
			{
				string strpart = s.substr(0, pos);
				s = s.substr(pos+1,s.length());
				value.push_back(strtod(strpart.c_str(), NULL));
				column_counter++;
				pos = s.find(&quot;\t&quot;);
			}
			column_counter++;
			value.push_back(strtod(s.c_str(), NULL));
			if (column_counter &gt; max_columns)
			{
				max_columns = column_counter;
			}

		}

		Mat.resize(row_counter);
		for (unsigned i = 0; i &lt; Mat.size(); ++i)
			Mat[i].resize(max_columns);

		infile.seekg(0);

		while(infile.eof())
		{

			getline(infile, s);
			size_t length = s.length();
			int i=0;
			size_t pos = s.find(&quot;\t&quot;);
			vector&lt;double&gt; value;

			while(pos != s.npos);
			{
				string strpart = s.substr(1, pos-1);
				s = s.substr(pos+1,length);
				value.push_back(strtod(strpart.c_str(), NULL));
				length = s.length();
				for(int j=0; j&lt;value.size();j++)
				{
					Mat[i][j]=value[j];
				}
				i++;
			}

		}

		infile.close();
</code></pre>
<p>Das Problem ist, dass in der ersten while-Schleife das Ende des txt-Files erreicht, somit infile.eof()=1 und ein Eintritt in die zweite Schleife unmöglich wird . Kann ich das eof-Flag manuell wieder zurücksetzen um den Eintritt in die zweite Schleife zu ermöglichen?</p>
<p>Der Code ist vermutlich auch nicht besonders effizient. Aber das ist nciht so wichtig, es soll einfach funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229926/frage-zu-fstream-eof</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 15:24:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229926.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Dec 2008 10:29:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu fstream.eof() on Thu, 18 Dec 2008 10:53:30 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe folgendes Problem: Ich will eine Tebelle, die in einem txt-file abgelegt ist auslesen und in einen 2D-Array speichern. Ich weiss zu Beginn jedoch nicht, wieviele Zeilen und wieviele Spalten die Tabelle hat. Deshalb lese ich die Tabelle zweimal ein, um beim ersten mal die Anzahl Zeieln und die maximale Anzahl Spalten zu ermitteln. Anschliessend initialisiere ich das Array und fülle es dann in einer zweiten Schlaufe. Hier mein Code (halt Anfängercode):</p>
<pre><code class="language-cpp">vector&lt; vector&lt;double&gt; &gt; Mat;

	int max_columns=0;
	int row_counter = 0;
	int column_counter = 0;

	infile.open(&quot;D:\\petersp\\Master-Arbeit DLD\\PF_2D\\properties_C35.txt&quot;, ios::in);

	if (infile.is_open())
	{
		while(!infile.eof())
		{
			getline(infile, s);
			row_counter++;
			size_t pos = s.find(&quot;\t&quot;);
			vector&lt;double&gt; value;
			column_counter = 0;

			while(pos != s.npos)
			{
				string strpart = s.substr(0, pos);
				s = s.substr(pos+1,s.length());
				value.push_back(strtod(strpart.c_str(), NULL));
				column_counter++;
				pos = s.find(&quot;\t&quot;);
			}
			column_counter++;
			value.push_back(strtod(s.c_str(), NULL));
			if (column_counter &gt; max_columns)
			{
				max_columns = column_counter;
			}

		}

		Mat.resize(row_counter);
		for (unsigned i = 0; i &lt; Mat.size(); ++i)
			Mat[i].resize(max_columns);

		infile.seekg(0);

		while(infile.eof())
		{

			getline(infile, s);
			size_t length = s.length();
			int i=0;
			size_t pos = s.find(&quot;\t&quot;);
			vector&lt;double&gt; value;

			while(pos != s.npos);
			{
				string strpart = s.substr(1, pos-1);
				s = s.substr(pos+1,length);
				value.push_back(strtod(strpart.c_str(), NULL));
				length = s.length();
				for(int j=0; j&lt;value.size();j++)
				{
					Mat[i][j]=value[j];
				}
				i++;
			}

		}

		infile.close();
</code></pre>
<p>Das Problem ist, dass in der ersten while-Schleife das Ende des txt-Files erreicht, somit infile.eof()=1 und ein Eintritt in die zweite Schleife unmöglich wird . Kann ich das eof-Flag manuell wieder zurücksetzen um den Eintritt in die zweite Schleife zu ermöglichen?</p>
<p>Der Code ist vermutlich auch nicht besonders effizient. Aber das ist nciht so wichtig, es soll einfach funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632298</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Thu, 18 Dec 2008 10:53:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu fstream.eof() on Thu, 18 Dec 2008 10:37:59 GMT]]></title><description><![CDATA[<p>Das heißt Schleife... <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/1632299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632299</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 18 Dec 2008 10:37:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu fstream.eof() on Thu, 18 Dec 2008 10:50:00 GMT]]></title><description><![CDATA[<p><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="😃"
    /> Sorry</p>
<p>Aber hast du evtl. auch ne Antwort auf die Frage?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632303</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Thu, 18 Dec 2008 10:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu fstream.eof() on Thu, 18 Dec 2008 10:57:17 GMT]]></title><description><![CDATA[<p>pitaz schrieb:</p>
<blockquote>
<p><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="😃"
    /> Sorry</p>
<p>Aber hast du evtl. auch ne Antwort auf die Frage?</p>
</blockquote>
<p>Warum so kompliziert? - Schreib einfach am Anfang die Anzahl rein. Und dann kannst du ganz einfach zuerst die Zahl einlesen und die Schleife sovielmal einlesen lassen..</p>
<p>Ansonsten hier:<br />
<a href="http://www.cplusplus.com/reference/iostream/ios/clear.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/clear.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632305</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 18 Dec 2008 10:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu fstream.eof() on Thu, 18 Dec 2008 11:02:06 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Danke erstmal. Und Du hast recht, wär vermutlich die bessere Variante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1632308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1632308</guid><dc:creator><![CDATA[pitaz]]></dc:creator><pubDate>Thu, 18 Dec 2008 11:02:06 GMT</pubDate></item></channel></rss>