<?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[Wertetabelle aus Datei mit unbekannter Größe auslesen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein funktionierendes Beispiel für mein Problem, jedoch bin ich mit der Lösung nicht zufrieden.</p>
<p>Zuerst habe ich eine Datei folgender Form:</p>
<pre><code>0 1
2 3
4 5
6 7
8 9
</code></pre>
<p>Die Länge der Datei ist unbekannt und ich möchte jetzt die linke Spalte in einen x-Koordinaten-vector und die rechte Spalte in einen y-Koordinaten-vector schreiben. Dazu zähle ich zuerst die Anzahl der Zeilen und lese in einem weiteren Schritt die Daten ein, wie in diesem Minimalbeispiel der Fall:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt; // string

using namespace std;

int main()
{
   vector&lt;double&gt; x;
   vector&lt;double&gt; y;

   //Pfad aus Datei auslesen
   fstream datei;
   datei.open(&quot;kreis.dat&quot;);

   int anzahl = 0;
   string zeile;

   while(getline(datei, zeile)) anzahl++;

   cout &lt;&lt; anzahl &lt;&lt; endl;

   datei.close();
   datei.open(&quot;kreis.dat&quot;);

   for(int i=0; i&lt;anzahl; i++)
   {
      int tmp[2];

      datei &gt;&gt; tmp[0] &gt;&gt; tmp[1];

      x.push_back(tmp[0]);
      y.push_back(tmp[1]);
   }

   datei.close();

   for (int i=0; i &lt;x.size(); i++)
      cout &lt;&lt; x[i] &lt;&lt; &quot; &quot; &lt;&lt; y[i] &lt;&lt; endl;

   return 0;
}
</code></pre>
<p>Jedoch müsste es ja möglich sein in jedem while-Schleifenschritt den String in zwei doubles aufzuteilen und zu speichern und dass bis zum Ende der Datei, jedoch ist mir ein Aufteilen eines Strings in zwei Zahlen nicht gelungen.</p>
<p>Vielen Dank für die Mithilfe,<br />
phanlipo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320379/wertetabelle-aus-datei-mit-unbekannter-größe-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 02:46:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320379.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Sep 2013 07:41:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 07:41:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein funktionierendes Beispiel für mein Problem, jedoch bin ich mit der Lösung nicht zufrieden.</p>
<p>Zuerst habe ich eine Datei folgender Form:</p>
<pre><code>0 1
2 3
4 5
6 7
8 9
</code></pre>
<p>Die Länge der Datei ist unbekannt und ich möchte jetzt die linke Spalte in einen x-Koordinaten-vector und die rechte Spalte in einen y-Koordinaten-vector schreiben. Dazu zähle ich zuerst die Anzahl der Zeilen und lese in einem weiteren Schritt die Daten ein, wie in diesem Minimalbeispiel der Fall:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt; // string

using namespace std;

int main()
{
   vector&lt;double&gt; x;
   vector&lt;double&gt; y;

   //Pfad aus Datei auslesen
   fstream datei;
   datei.open(&quot;kreis.dat&quot;);

   int anzahl = 0;
   string zeile;

   while(getline(datei, zeile)) anzahl++;

   cout &lt;&lt; anzahl &lt;&lt; endl;

   datei.close();
   datei.open(&quot;kreis.dat&quot;);

   for(int i=0; i&lt;anzahl; i++)
   {
      int tmp[2];

      datei &gt;&gt; tmp[0] &gt;&gt; tmp[1];

      x.push_back(tmp[0]);
      y.push_back(tmp[1]);
   }

   datei.close();

   for (int i=0; i &lt;x.size(); i++)
      cout &lt;&lt; x[i] &lt;&lt; &quot; &quot; &lt;&lt; y[i] &lt;&lt; endl;

   return 0;
}
</code></pre>
<p>Jedoch müsste es ja möglich sein in jedem while-Schleifenschritt den String in zwei doubles aufzuteilen und zu speichern und dass bis zum Ende der Datei, jedoch ist mir ein Aufteilen eines Strings in zwei Zahlen nicht gelungen.</p>
<p>Vielen Dank für die Mithilfe,<br />
phanlipo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355631</guid><dc:creator><![CDATA[phanlipo]]></dc:creator><pubDate>Thu, 26 Sep 2013 07:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:30:46 GMT]]></title><description><![CDATA[<p>Ungetestet:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

using namespace std;

int main()
{
   vector&lt;double&gt; x;
   vector&lt;double&gt; y;

   //Pfad aus Datei auslesen
   fstream datei;
   datei.open(&quot;kreis.dat&quot;);

   string zeile;

   while(getline(datei, zeile))
   {
      double a,b;
      stringstream ss( zeile );
      ss &gt;&gt; a &gt;&gt; b;
      x.push_back(a);
      y.push_back(b);
   }

   cout &lt;&lt; x.size() &lt;&lt; endl;

   datei.close();
   for (int i=0; i &lt;x.size(); i++)
      cout &lt;&lt; x[i] &lt;&lt; &quot; &quot; &lt;&lt; y[i] &lt;&lt; endl;

   return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2355639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355639</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:30:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:43:05 GMT]]></title><description><![CDATA[<p>Vielen Dank, das klappt prima. Doch einfacher als gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355644</guid><dc:creator><![CDATA[phanlipo]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:45:32 GMT]]></title><description><![CDATA[<p>phanlipo schrieb:</p>
<blockquote>
<p>ich habe ein funktionierendes Beispiel für mein Problem, jedoch bin ich mit der Lösung nicht zufrieden.</p>
</blockquote>
<p>Mir scheint Dein Code löst ein Problem, das Du gar nicht hast.</p>
<p>Willst Du wirklich zwei unabhängige Vektoren mit lauter Zahlen?</p>
<p>Mir dünkt Du willst eigentlich Positionen auslesen, oder Koordinaten, oder Tupel - jedenfalls zwei Werte, die zusammen einen Sinn ergeben.</p>
<p>Nennen wir's mal pos:</p>
<pre><code class="language-cpp">struct pos{ int x,y; };
</code></pre>
<p>Jetzt hast Du ein File, in dem in jeder Zeile ein <code>pos</code> beschrieben durch seine beiden Member steht.<br />
Also schreibst Du Dir einen <code>operator&gt;&gt;()</code> der aus einer solchen Zeile ein pos zusammenbaut:</p>
<pre><code class="language-cpp">std::istream&amp; operator&gt;&gt;(std::istream&amp; in, pos&amp; p){
  return in &gt;&gt; p.x &gt;&gt; p.y;
}
</code></pre>
<p>Damit kannst Du jetzt ein <code>pos</code> aus einem Stream extrahieren.</p>
<p>Und das war's auch schon.<br />
Du kannst das Spielchen jetzt für die Ausgabe wiederholen.</p>
<p>Im folgenden bastel ich insgesamt vier solcher Operatoren. Nur zur Veranschaulichung - die letzten beiden finde ich reichlich überflüssig.</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;

struct pos{ int x,y; };

typedef std::vector&lt;pos&gt; position_table;

std::istream&amp; operator&gt;&gt;(std::istream&amp; in, pos&amp; p){
  return in &gt;&gt; p.x &gt;&gt; p.y;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const pos&amp; p){
  return out &lt;&lt; p.x &lt;&lt; '/' &lt;&lt; p.y;
}

std::istream&amp; operator&gt;&gt;(std::istream&amp; in, position_table&amp; positions){
  pos p;
  while(in&gt;&gt;p)
    positions.push_back(p);
  return in;
}

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; out, const position_table&amp; positions){
  for( const auto&amp; p : positions)
    out &lt;&lt; p &lt;&lt; '\n';
  return out;
}

int main(){
  position_table positions;
  std::ifstream file(&quot;data.txt&quot;);
  file&gt;&gt;positions;
  std::cout &lt;&lt; positions;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2355648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355648</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:46:24 GMT]]></title><description><![CDATA[<p>Das Puffern der Zeile ist völlig überflüssig.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

int main()
{
	using namespace std;

	istringstream stream{&quot;4 8 6 5 7 1 2 8&quot;}; // Ob die beiden Paare durch einen Zeilenumbruch getrennt sind oder nicht, ist irrelevant. 
// (Ich nehme an, die Zeilenumbrüche sind in der Datei nur der Lesbarkeit wegen?)

	vector&lt;double&gt; x_vector, 
	               y_vector; // Die beiden vectors.

	double x, y;
	while( stream &gt;&gt; x &gt;&gt; y )
	{
		x_vector.push_back(x);
		y_vector.push_back(y);
	}

	// Ausgabe
	copy( begin(x_vector), end(x_vector), ostream_iterator&lt;double&gt;{cout &lt;&lt; &quot;X: &quot;, &quot; &quot;} );
	copy( begin(y_vector), end(y_vector), ostream_iterator&lt;double&gt;{cout &lt;&lt; &quot;Y: &quot;, &quot; &quot;} );
}
</code></pre>
<p>Edit: Furble war schneller.</p>
<blockquote>
<p>Mir dünkt Du willst eigentlich Positionen auslesen, oder Koordinaten, oder Tupel - jedenfalls zwei Werte, die zusammen einen Sinn ergeben.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355649</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:48:34 GMT]]></title><description><![CDATA[<pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; in, position_table&amp; positions){
  pos p;
  while(in&gt;&gt;p)
    positions.push_back(p);
  return in;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; in, position_table&amp; positions)
{
  std::copy( std::istream_iterator&lt;pos&gt;(in), std::istream_iterator&lt;pos&gt;(), std::back_inserter(positions) );
  return in;
}
</code></pre>
<p>(Ungetestet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355650</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:48:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:52:19 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; in, position_table&amp; positions){
  pos p;
  while(in&gt;&gt;p)
    positions.push_back(p);
  return in;
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; in, position_table&amp; positions)
{
  std::copy( std::istream_iterator&lt;pos&gt;(in), std::istream_iterator&lt;pos&gt;(), std::back_inserter(positions) );
  return in;
}
</code></pre>
<p>(Ungetestet)</p>
</blockquote>
<p>wozu?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355653</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:54:20 GMT]]></title><description><![CDATA[<blockquote>
<p>wozu?</p>
</blockquote>
<p>Nun, die Devise ist doch, immer die Standard-Bibliothek ausschöpfen? Nackte Schleifen vermeiden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355654</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:54:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 09:00:02 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<blockquote>
<p>wozu?</p>
</blockquote>
<p>Nun, die Devise ist doch, immer die Standard-Bibliothek ausschöpfen? Nackte Schleifen vermeiden?</p>
</blockquote>
<p>Nö, sicher nicht.</p>
<p>Mach besser den Fehler weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355655</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Sep 2013 09:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 08:59:08 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Mach besser den Fehler weg.</p>
</blockquote>
<p>Der einzige Fehler den ich sehe, ist, dass der Container nicht geleert wird.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; in, position_table&amp; positions)
{
  positions.clear();
  pos p;
  while(in&gt;&gt;p)
    positions.push_back(p);
  return in;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2355657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355657</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 26 Sep 2013 08:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 09:00:37 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Der einzige Fehler den ich sehe, ist, dass der Container nicht geleert wird.</p>
</blockquote>
<p>Den meinte ich auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355658</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Sep 2013 09:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 09:05:42 GMT]]></title><description><![CDATA[<p>Auch falsch. Ein neuer Container sollte erstellt werden und dann move-assigned werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355659</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 26 Sep 2013 09:05:42 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 09:36:27 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Auch falsch. Ein neuer Container sollte erstellt werden und dann move-assigned werden.</p>
</blockquote>
<p>Inwiefern ist das besser?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355660</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 26 Sep 2013 09:36:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 09:12:56 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Auch falsch. Ein neuer Container sollte erstellt werden und dann move-assigned werden.</p>
</blockquote>
<p>Jo, man wird wohl erwarten, daß wenn der op&gt;&gt; failt, der vector unverändert bleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355661</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Sep 2013 09:12:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wertetabelle aus Datei mit unbekannter Größe auslesen on Thu, 26 Sep 2013 09:54:02 GMT]]></title><description><![CDATA[<blockquote>
<p>Auch falsch</p>
</blockquote>
<p>Falsch! <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="🙂"
    /> Ansichtsache, problemspezifisch, sollte spezifiziert warden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355674</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 26 Sep 2013 09:54:02 GMT</pubDate></item></channel></rss>