<?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[einlesen einer datei in einen vector]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>ich sitze leider immer noch an meinem Problem, Daten aus einer .txt Datei in einen vector einzulesen. Das ist an sich ja weniger ein Problem, das kommt erst dadurch dass mein vector mit einer selbstdefinierten Punkteklasse gefuellt wird. Erschwert wird es dann noch dass ich mittendrin aus der Datei die Daten fuer meine Punkte holen muss, da die Datei auch noch andere Werte enthaelt. Also, hier mal Code zur Erklaerung:</p>
<p>Mein Ascii-File:</p>
<p>scale: 0<br />
size: 449<br />
#:-9.28698-3.48793-11.2223 -19.7867-14.669-20.9273 -3.11538-1.37863-16.9392 -8.2694-10.7538-31.6018 1.263-2.80125-16.9392 -0.0778647-13.4153-31.6018 -3.69872-7.03435-11.2223 -9.34507-21.2954-20.9273</p>
<p>Meine PunkteKlasse:</p>
<pre><code class="language-cpp">PointN::PointN()
{
	//data = NULL;
         //dim = 0;
	data = new double[3];
	for(int i = 0; i&lt;3; i++)
	{
		data[i] = 0;
	}

	dim = 3;
	invalid = false;
}
</code></pre>
<p>Der Istream-Operator:</p>
<pre><code class="language-cpp">istream&amp; operator&gt;&gt;(istream&amp; in, PointN&amp; p) 
{ 
	int iDim = p.getDim();
	for(int i = 0; i &lt; 3; i++) 
		in &gt;&gt; p[i]; 
	return in;
}
</code></pre>
<p>Der Teil der load Funktion:</p>
<pre><code class="language-cpp">if (szBuffer.find(&quot;#:&quot;,0) != string::npos)
		{
			vector&lt;PointN&gt;::size_type size = iBaseSize; 
			vBasePoints.reserve(size); 

			istream_iterator&lt;PointN&gt; pos1; // Anfangsiterator auf die Datei 
			istream_iterator&lt;PointN&gt; iBaseSize; // Enditerator 
			copy(pos1,iBaseSize,back_inserter(vBasePoints)); 
		}
</code></pre>
<p>Wenn ich das versuche steht nachher in meinem vBasePoints nichts drin. Woher kommt das? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke fuer eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133722/einlesen-einer-datei-in-einen-vector</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 05:12:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133722.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Jan 2006 10:11:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to einlesen einer datei in einen vector on Fri, 20 Jan 2006 10:11:27 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>ich sitze leider immer noch an meinem Problem, Daten aus einer .txt Datei in einen vector einzulesen. Das ist an sich ja weniger ein Problem, das kommt erst dadurch dass mein vector mit einer selbstdefinierten Punkteklasse gefuellt wird. Erschwert wird es dann noch dass ich mittendrin aus der Datei die Daten fuer meine Punkte holen muss, da die Datei auch noch andere Werte enthaelt. Also, hier mal Code zur Erklaerung:</p>
<p>Mein Ascii-File:</p>
<p>scale: 0<br />
size: 449<br />
#:-9.28698-3.48793-11.2223 -19.7867-14.669-20.9273 -3.11538-1.37863-16.9392 -8.2694-10.7538-31.6018 1.263-2.80125-16.9392 -0.0778647-13.4153-31.6018 -3.69872-7.03435-11.2223 -9.34507-21.2954-20.9273</p>
<p>Meine PunkteKlasse:</p>
<pre><code class="language-cpp">PointN::PointN()
{
	//data = NULL;
         //dim = 0;
	data = new double[3];
	for(int i = 0; i&lt;3; i++)
	{
		data[i] = 0;
	}

	dim = 3;
	invalid = false;
}
</code></pre>
<p>Der Istream-Operator:</p>
<pre><code class="language-cpp">istream&amp; operator&gt;&gt;(istream&amp; in, PointN&amp; p) 
{ 
	int iDim = p.getDim();
	for(int i = 0; i &lt; 3; i++) 
		in &gt;&gt; p[i]; 
	return in;
}
</code></pre>
<p>Der Teil der load Funktion:</p>
<pre><code class="language-cpp">if (szBuffer.find(&quot;#:&quot;,0) != string::npos)
		{
			vector&lt;PointN&gt;::size_type size = iBaseSize; 
			vBasePoints.reserve(size); 

			istream_iterator&lt;PointN&gt; pos1; // Anfangsiterator auf die Datei 
			istream_iterator&lt;PointN&gt; iBaseSize; // Enditerator 
			copy(pos1,iBaseSize,back_inserter(vBasePoints)); 
		}
</code></pre>
<p>Wenn ich das versuche steht nachher in meinem vBasePoints nichts drin. Woher kommt das? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke fuer eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/971172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/971172</guid><dc:creator><![CDATA[samo]]></dc:creator><pubDate>Fri, 20 Jan 2006 10:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer datei in einen vector on Fri, 20 Jan 2006 10:36:25 GMT]]></title><description><![CDATA[<p>Erstens mußt du den Anfangs-Interator auch mit deiner Datei verknüpfen (indem du den Eingabestream im Konstruktor angibst.</p>
<pre><code class="language-cpp">istream_iterator&lt;PointN&gt; start(fin);//lies aus Datei fin
istream_iterator&lt;PointN&gt; ende;//Endemarke
copy(start,ende,back_interter(vBasePoints)
</code></pre>
<p>Und zweitens: Pass auf, ob nicht noch die ersten Koordinatenwerte in szBuffer eingelesen wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/971189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/971189</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Fri, 20 Jan 2006 10:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer datei in einen vector on Fri, 20 Jan 2006 12:18:10 GMT]]></title><description><![CDATA[<p>O.k., was vielleicht noch fehlt aus meinem Code ist:</p>
<pre><code class="language-cpp">ifstream file((szName).c_str());
string::size_type pos1 = 0;
string szBuffer;

while (file)
{
		getline(file, szBuffer);
                  if (szBuffer.find(&quot;size: &quot;,0) != string::npos)
		{
			szValue = szBuffer.substr(6,pos2);
			iBaseSize = atoi(szValue.c_str());
		}
		if (szBuffer.find(&quot;#:&quot;,0) != string::npos)
		{
			vector&lt;PointN&gt;::size_type size = iBaseSize; 
			vBasePoints.reserve(size); 

			istream_iterator&lt;PointN&gt; pos1; // Anfangsiterator auf die Datei 
			istream_iterator&lt;PointN&gt; iBaseSize; // Enditerator 
			copy(pos1,iBaseSize,back_inserter(vBasePoints)); 
		}
                   ........//weiterer Code
                   ........
}
</code></pre>
<p>Bis jetzt lese ich immer eine Zeile in einen Buffer und suche nach keywords, da ja, wie erwaehnt, nicht nur die Daten fuer meinen vector in der Datei stehen sondern noch andere Dinge. Die Frage ist jetzt, ob das so ueberhaupt geht oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/971281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/971281</guid><dc:creator><![CDATA[Samo]]></dc:creator><pubDate>Fri, 20 Jan 2006 12:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to einlesen einer datei in einen vector on Sat, 21 Jan 2006 16:06:23 GMT]]></title><description><![CDATA[<p>Samo schrieb:</p>
<blockquote>
<p>Bis jetzt lese ich immer eine Zeile in einen Buffer und suche nach keywords, da ja, wie erwaehnt, nicht nur die Daten fuer meinen vector in der Datei stehen sondern noch andere Dinge. Die Frage ist jetzt, ob das so ueberhaupt geht oder nicht.</p>
</blockquote>
<p>Gehen geht das schon. Die Frage ist, ob es nicht einfacher ist, im Prinzip gleich die Sachen so einzulesen, wie man sie braucht. Zum Beispiel:</p>
<pre><code class="language-cpp">int main()
{
    using namespace std;
    vector&lt; PointN &gt; vBasePoints;

    ifstream in( &quot;input.txt&quot; );
    int scale = 0;
    int sz = 0;
    for(;;)
    {
        std::string key;
        if( !getline( in, key, ':' ) )
            break;
        if( key == &quot;scale&quot; )
        {
            in &gt;&gt; scale;
        }
        else if( key == &quot;size&quot; )
        {
            in &gt;&gt; sz;
        }
        else if( key == &quot;#&quot; )
        {
            string zeile;
            getline( in, zeile );
            stringstream strm( zeile );
            copy( istream_iterator&lt; PointN &gt;( strm ), istream_iterator&lt; PointN &gt;(),
                back_inserter( vBasePoints ) );
        }
        // else if( usw.
    }
    return 0;
}
</code></pre>
<p>Die Zeile mit den PointN's lese ich nur deshalb als ganzes ein, weil beim Einlesen von Zahlen das Zeilenende überlesen wird. Es sei denn, es ist definiert, wieviele PointN's in der Zeile stehen.</p>
<p>Falls Du 'scale' und 'size' nicht benötigst, kannst Du auch ignore einsetzen.<br />
Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/972240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/972240</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 21 Jan 2006 16:06:23 GMT</pubDate></item></channel></rss>