<?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[File Parser - Daten aus Datei einlesen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>für mein Programm habe ich mir einen File-Parser geschrieben.<br />
Bisher sieht dieser wie folgt aus:</p>
<pre><code class="language-cpp">std::ifstream file;
std::vector&lt;double&gt; tempVector;

double tempValueOne, tempValueTwo;

std::ifstream filePath(nameOfFile.c_str());
for( int i=0; i &lt; 325 &amp;&amp; filePath; ++i )
{
  filePath &gt;&gt; tempValueOne &gt;&gt; tempValueTwo;
  tempVector.push_back(tempValueOne);
  tempVector.push_back(tempValueTwo);

  data_dblvec.push_back(tempVector); // std::vector&lt;std::vector&lt;double&gt;&gt;
  tempVector.clear();
}
</code></pre>
<p>Die funktioniert auch alles.</p>
<p>Mein Problem ist nun aber, dass wenn meine Datei aus mehr Zeilen besteht müsste ich die Schleife ja ändern.<br />
Ebenso wenn mehr Double Werte in einer Zeile stehen.</p>
<p>Gibt es hierfür so etwas wie einen Iterator, der solange die Zeile abarbeitet bis darin keine Symbole mehr auftauchen?<br />
Ebenso der solange die nächste Zeile bearbeitet, bis es eben keine nächste Zeile mehr gibt?<br />
(Ich kenne dies aus Java, wo so etwas möglich ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227170/file-parser-daten-aus-datei-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 09:53:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227170.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Nov 2008 09:12:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Wed, 12 Nov 2008 09:12:29 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>für mein Programm habe ich mir einen File-Parser geschrieben.<br />
Bisher sieht dieser wie folgt aus:</p>
<pre><code class="language-cpp">std::ifstream file;
std::vector&lt;double&gt; tempVector;

double tempValueOne, tempValueTwo;

std::ifstream filePath(nameOfFile.c_str());
for( int i=0; i &lt; 325 &amp;&amp; filePath; ++i )
{
  filePath &gt;&gt; tempValueOne &gt;&gt; tempValueTwo;
  tempVector.push_back(tempValueOne);
  tempVector.push_back(tempValueTwo);

  data_dblvec.push_back(tempVector); // std::vector&lt;std::vector&lt;double&gt;&gt;
  tempVector.clear();
}
</code></pre>
<p>Die funktioniert auch alles.</p>
<p>Mein Problem ist nun aber, dass wenn meine Datei aus mehr Zeilen besteht müsste ich die Schleife ja ändern.<br />
Ebenso wenn mehr Double Werte in einer Zeile stehen.</p>
<p>Gibt es hierfür so etwas wie einen Iterator, der solange die Zeile abarbeitet bis darin keine Symbole mehr auftauchen?<br />
Ebenso der solange die nächste Zeile bearbeitet, bis es eben keine nächste Zeile mehr gibt?<br />
(Ich kenne dies aus Java, wo so etwas möglich ist)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613409</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Wed, 12 Nov 2008 09:12:29 GMT</pubDate></item><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Wed, 12 Nov 2008 09:31:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;fstream&gt;
#include &lt;sstream&gt;

int main()
{
  double value;
  std::string line;
  std::vector&lt;double&gt; tempVector;

  std::ifstream file(nameOfFile.c_str());

  while(std::getline(file, line))
  {
    std::istringstream iss(line);

    while(iss &gt;&gt; value)
    { tempVector.push_back(value); }
  }

  // ...

  return 0;
}
</code></pre>
<p>std::getline: <a href="http://www.cplusplus.com/reference/string/getline.html" rel="nofollow">http://www.cplusplus.com/reference/string/getline.html</a><br />
std::ios::operator void*(): <a href="http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613421</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 12 Nov 2008 09:31:06 GMT</pubDate></item><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Wed, 12 Nov 2008 10:50:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

int main()
{
    std::vector&lt; std::vector&lt;double&gt; &gt; data_dblvec;
    std::string nameOfFile = &quot;input.txt&quot;;
    std::ifstream filePath( nameOfFile.c_str() );
    for( std::vector&lt; double &gt; tempVector(2); filePath &gt;&gt; tempVector[0] &gt;&gt; tempVector[1]; )
        data_dblvec.push_back( tempVector );
    return 0;
}
</code></pre>
<p>Bem.: getline ist wirklich meistens doof; und in diesem Fall garantiert</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613481</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Wed, 12 Nov 2008 10:50:20 GMT</pubDate></item><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Wed, 12 Nov 2008 12:02:41 GMT]]></title><description><![CDATA[<p>Tja, und was ist dann mit:</p>
<p>redbomber schrieb:</p>
<blockquote>
<p>Ebenso wenn mehr Double Werte in einer Zeile stehen.</p>
</blockquote>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613528</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 12 Nov 2008 12:02:41 GMT</pubDate></item><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Wed, 12 Nov 2008 19:17:20 GMT]]></title><description><![CDATA[<p>Ja genau, bei mir könnten also auch viele Double Werte in einer Zeile stehen.</p>
<p>Vielen Dank euch allen, hat super geklappt.</p>
<p>Nun noch eine Frage:<br />
Um Fehler abzufangen überprüfe ich die Größe vom Vector in den alle Double Werte geschrieben werden. Falls dieser leer ist gebe ich eine Fehler aus.<br />
Würdet ihr das genauso machen oder hättet ihr einen besseren Vorschlag um Fehler beim einlesen abzufangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613718</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Wed, 12 Nov 2008 19:17:20 GMT</pubDate></item><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Wed, 12 Nov 2008 19:40:15 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>Nun noch eine Frage:<br />
Um Fehler abzufangen überprüfe ich die Größe vom Vector in den alle Double Werte geschrieben werden. Falls dieser leer ist gebe ich eine Fehler aus.<br />
Würdet ihr das genauso machen oder hättet ihr einen besseren Vorschlag um Fehler beim einlesen abzufangen?</p>
</blockquote>
<p>Ja, das kannst du machen. Je nachdem kannst du auch eine Exception werfen - kommt halt drauf an, wie häufig der Fehler vorkommt. Wenn man normalerweise nicht damit rechnet, ist eine Exception angebracht, sonst nicht.</p>
<p>Zudem kannst du den Filestream auf <code>fail()</code> abfragen, um zu sehen, ob intern was schief gelaufen ist. Eventuell ist auch eine manuelle Überprüfung der <code>double</code> -Werte angebracht, wenn diese z.B. bestimmte Wertebereiche oder andere Bedingungen einhalten müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613728</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 12 Nov 2008 19:40:15 GMT</pubDate></item><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Wed, 12 Nov 2008 20:52:25 GMT]]></title><description><![CDATA[<p>Naja, Werner hat schon recht. <code>getline</code> ist hier eigentlich mit dem Beispiel doof. Aber es kommt etwas drauf an, was du mit den doubles machst. Wenn du sie einfach nur alle in dem Vektor haben willst, egal auf welcher Zeile sie waren, dann wäre wohl das folgende besser:</p>
<pre><code class="language-cpp">#include &lt;vector&gt; // vector
#include &lt;fstream&gt; // ifstream
#include &lt;iterator&gt; // istream_iterator, back_inserter
#include &lt;algorithm&gt; // copy

// ...

std::ifstream file(&quot;...&quot;);
std::vector&lt;double&gt; vec;

std::copy(std::istream_iterator&lt;double&gt;(file),
          std::istream_iterator&lt;double&gt;(),
          std::back_inserter(vec));
</code></pre>
<p><code>std::istream_iterator</code> liest mit dem <code>operator &gt;&gt;</code> . Per Default ist skip whitespace als Option aktiviert. Jeglicher Linefeed, Carriage Return, Space und Tab wird ignoriert. Die Copy Anweisung kopiert nun jeglicher double im File in den Vektor, bis das Ende des Files erreicht wird.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613754</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 12 Nov 2008 20:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to File Parser - Daten aus Datei einlesen on Thu, 13 Nov 2008 07:29:53 GMT]]></title><description><![CDATA[<p>Ok, in meinem Fall wäre es dann aber doch mit getline angebracht, da die Werte in einer Zeile zusammen gehören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613844</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Thu, 13 Nov 2008 07:29:53 GMT</pubDate></item></channel></rss>