<?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 und Übergabe an Array ab einer bestimmten Zeile]]></title><description><![CDATA[<p>Hallo C++ Experten,</p>
<p>ich versuche derzeit eine Datei einzulesen, bin mir aber nicht sicher wie ich das an einer bestimmten Zeile auslesen soll. Meine Datei besitzt folgendes Format:<br />
------------------------------------------------------------------------<br />
Berechnung<br />
Anzahl der Punkte: 200 # Atome: 10</p>
<p>Punkt 1 : 0.00000000 0.00000000 0.00000000 Gewichtung = 0.00500000</p>
<p>Energie 1 # mit Gewichtung 1.00000000</p>
<p>Atom a b c d<br />
1 0.476 0.000 0.000 0.100<br />
2 0.476 0.000 0.000 0.100<br />
1 0.000 -0.000 -0.000 0.200<br />
2 -0.000 -0.000 0.000 0.200</p>
<p>Energie 2 # mit Gewichtung 1.00000000</p>
<p>Atom a b c d<br />
1 0.476 0.000 0.000 0.300<br />
2 0.476 0.000 0.000 0.300<br />
1 0.000 -0.000 -0.000 0.400<br />
2 -0.000 -0.000 0.000 0.400</p>
<p>Energie 2 # mit Gewichtung 1.00000000</p>
<p>Atom a b c d<br />
1 0.476 0.000 0.000 0.500<br />
2 0.476 0.000 0.000 0.500<br />
1 0.000 -0.000 -0.000 0.600<br />
2 -0.000 -0.000 0.000 0.600</p>
<p>....<br />
------------------------------------------------------------------------</p>
<p>Der Code, den ich mir bislang zusammengeschrieben habe, summiert über alle letzten Spalten:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;vector&gt;

using namespace std;

int main()
{
    int reihen = 0;
    int spalten = 0;
    string line;
    int ersteZahl = 0;
    vector&lt;vector&lt;double&gt; &gt; werte;
    vector&lt;vector&lt;double&gt; &gt; ergebnis;
    vector&lt;double&gt; reihentotal;
    ofstream Datei;
    ifstream in(&quot;datei.txt&quot;);
    Datei.open(&quot;ausgelesene_datei.txt&quot;,ios::app);
    Datei.setf(ios::fixed);
    Datei.setf(ios::showpoint);
    Datei.precision(3);

    if(in.fail()) 
    {
        cerr &lt;&lt; &quot;Datei kann nicht geoffnet werden&quot; &lt;&lt; endl;
        return -1;
    }

    Datei &lt;&lt; &quot;\n&quot; &lt;&lt; endl;

    // Speichere jede Zahl
    while(in.good()) 
    {

        while(getline(in, line)) 
        {            

            istringstream stream(line);
            vector&lt;double&gt; tmp;
            double x;

            while (stream &gt;&gt; x)
              tmp.push_back(x);

            if (tmp.size() &gt; 0)
              werte.push_back(tmp);

        }
    }

    // Pruefe ob die Spaltenanzahl sich veraendert hat oder nicht
    spalten = werte[0].size();
    for (unsigned i = 1; i &lt; werte.size(); ++i)
    {
        if (werte[i].size() != spalten)
        {
            cerr &lt;&lt; &quot;Reihe mit unterschiedlicher Spaltennummer&quot; &lt;&lt; endl;
            return -1;
        }
    }

    for (unsigned i = 0; i &lt; werte.size(); ++i)
	{
        // Wenn eine Zahl mit 1 beginnt, fuege es der Reihe hinzu
        if (werte[i][0] == 1.0)
          ergebnis.push_back(werte[i]);

        // Wenn eine Zahl bzw. Zeile mit 2 beginnt, fuege es ebenfalls der Reihe hinzu
        if (werte[i][0] == 2.0)
        {
            for (unsigned j = 0; j &lt; werte[i].size(); ++j)
              ergebnis.back()[j] += werte[i][j];
        }
    }

    reihen = ergebnis.size();

    Datei &lt;&lt; &quot;Anzahl der Reihen # &quot; &lt;&lt; reihen &lt;&lt; endl;
    Datei &lt;&lt; &quot;Anzahl der Spalten # &quot; &lt;&lt; spalten &lt;&lt; endl;
    Datei &lt;&lt; &quot; &quot; &lt;&lt; endl;

    for(int i=0; i &lt; reihen; i++) 
    {
        for(int j=4; j &lt; spalten; j++) 
        {
            Datei &lt;&lt; ergebnis[i][j]  &lt;&lt;  &quot;	 &quot; &lt;&lt; &quot;  &quot; &lt;&lt; endl;
        }
    }

    for(int i=0; i &lt; reihen; i++)
    {  
        reihentotal.push_back(0.0);
        for (int j=1; j &lt; spalten; j++) 
        {
            reihentotal[i] += ergebnis[i][j];
        }
    }

	Datei.close();
    in.close();
    return 0;
}
</code></pre>
<p>Die Ausgabe erfolgt als:</p>
<p>Anzahl der Reihen # 6<br />
Anzahl der Spalten # 5</p>
<p>0.200<br />
0.400<br />
0.600<br />
0.800<br />
1.000<br />
1.200</p>
<p>Ich würde aber gerne über nur über die Blöcke mit Aufschrift &quot;Energie 2 #&quot; summieren, d.h. es sollte dann folgendes ausgegeben werden (unter Vernachlässigung des Blocks &quot;Energie 1 #&quot;:</p>
<p>0.600<br />
0.800<br />
1.000<br />
1.200</p>
<p>Ich habe versucht eine &quot;*.find function&quot; mit String-Inhalt einzubauen, bevor die Werte bei &quot;werte[i][0] == 1.0&quot; und &quot;werte[i][0] == 2.0&quot; eingelesen werden, kriege es aber irgendwie nicht hin, obwohl es nur noch ein kleiner Schritt ist :(.</p>
<p>Ich wäre sehr dankbar, wenn mir jemand helfen könnte, wie ich es richtig zu parsen bzw. zu &quot;tokenizen&quot; habe.</p>
<p>Viele Dank im Voraus für jegliche Hilfe,</p>
<p>ThOr_Asgard</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/340419/einlesen-einer-datei-und-übergabe-an-array-ab-einer-bestimmten-zeile</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 05:38:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/340419.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Nov 2016 14:33:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einlesen einer Datei und Übergabe an Array ab einer bestimmten Zeile on Mon, 07 Nov 2016 15:51:03 GMT]]></title><description><![CDATA[<p>Hallo C++ Experten,</p>
<p>ich versuche derzeit eine Datei einzulesen, bin mir aber nicht sicher wie ich das an einer bestimmten Zeile auslesen soll. Meine Datei besitzt folgendes Format:<br />
------------------------------------------------------------------------<br />
Berechnung<br />
Anzahl der Punkte: 200 # Atome: 10</p>
<p>Punkt 1 : 0.00000000 0.00000000 0.00000000 Gewichtung = 0.00500000</p>
<p>Energie 1 # mit Gewichtung 1.00000000</p>
<p>Atom a b c d<br />
1 0.476 0.000 0.000 0.100<br />
2 0.476 0.000 0.000 0.100<br />
1 0.000 -0.000 -0.000 0.200<br />
2 -0.000 -0.000 0.000 0.200</p>
<p>Energie 2 # mit Gewichtung 1.00000000</p>
<p>Atom a b c d<br />
1 0.476 0.000 0.000 0.300<br />
2 0.476 0.000 0.000 0.300<br />
1 0.000 -0.000 -0.000 0.400<br />
2 -0.000 -0.000 0.000 0.400</p>
<p>Energie 2 # mit Gewichtung 1.00000000</p>
<p>Atom a b c d<br />
1 0.476 0.000 0.000 0.500<br />
2 0.476 0.000 0.000 0.500<br />
1 0.000 -0.000 -0.000 0.600<br />
2 -0.000 -0.000 0.000 0.600</p>
<p>....<br />
------------------------------------------------------------------------</p>
<p>Der Code, den ich mir bislang zusammengeschrieben habe, summiert über alle letzten Spalten:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;vector&gt;

using namespace std;

int main()
{
    int reihen = 0;
    int spalten = 0;
    string line;
    int ersteZahl = 0;
    vector&lt;vector&lt;double&gt; &gt; werte;
    vector&lt;vector&lt;double&gt; &gt; ergebnis;
    vector&lt;double&gt; reihentotal;
    ofstream Datei;
    ifstream in(&quot;datei.txt&quot;);
    Datei.open(&quot;ausgelesene_datei.txt&quot;,ios::app);
    Datei.setf(ios::fixed);
    Datei.setf(ios::showpoint);
    Datei.precision(3);

    if(in.fail()) 
    {
        cerr &lt;&lt; &quot;Datei kann nicht geoffnet werden&quot; &lt;&lt; endl;
        return -1;
    }

    Datei &lt;&lt; &quot;\n&quot; &lt;&lt; endl;

    // Speichere jede Zahl
    while(in.good()) 
    {

        while(getline(in, line)) 
        {            

            istringstream stream(line);
            vector&lt;double&gt; tmp;
            double x;

            while (stream &gt;&gt; x)
              tmp.push_back(x);

            if (tmp.size() &gt; 0)
              werte.push_back(tmp);

        }
    }

    // Pruefe ob die Spaltenanzahl sich veraendert hat oder nicht
    spalten = werte[0].size();
    for (unsigned i = 1; i &lt; werte.size(); ++i)
    {
        if (werte[i].size() != spalten)
        {
            cerr &lt;&lt; &quot;Reihe mit unterschiedlicher Spaltennummer&quot; &lt;&lt; endl;
            return -1;
        }
    }

    for (unsigned i = 0; i &lt; werte.size(); ++i)
	{
        // Wenn eine Zahl mit 1 beginnt, fuege es der Reihe hinzu
        if (werte[i][0] == 1.0)
          ergebnis.push_back(werte[i]);

        // Wenn eine Zahl bzw. Zeile mit 2 beginnt, fuege es ebenfalls der Reihe hinzu
        if (werte[i][0] == 2.0)
        {
            for (unsigned j = 0; j &lt; werte[i].size(); ++j)
              ergebnis.back()[j] += werte[i][j];
        }
    }

    reihen = ergebnis.size();

    Datei &lt;&lt; &quot;Anzahl der Reihen # &quot; &lt;&lt; reihen &lt;&lt; endl;
    Datei &lt;&lt; &quot;Anzahl der Spalten # &quot; &lt;&lt; spalten &lt;&lt; endl;
    Datei &lt;&lt; &quot; &quot; &lt;&lt; endl;

    for(int i=0; i &lt; reihen; i++) 
    {
        for(int j=4; j &lt; spalten; j++) 
        {
            Datei &lt;&lt; ergebnis[i][j]  &lt;&lt;  &quot;	 &quot; &lt;&lt; &quot;  &quot; &lt;&lt; endl;
        }
    }

    for(int i=0; i &lt; reihen; i++)
    {  
        reihentotal.push_back(0.0);
        for (int j=1; j &lt; spalten; j++) 
        {
            reihentotal[i] += ergebnis[i][j];
        }
    }

	Datei.close();
    in.close();
    return 0;
}
</code></pre>
<p>Die Ausgabe erfolgt als:</p>
<p>Anzahl der Reihen # 6<br />
Anzahl der Spalten # 5</p>
<p>0.200<br />
0.400<br />
0.600<br />
0.800<br />
1.000<br />
1.200</p>
<p>Ich würde aber gerne über nur über die Blöcke mit Aufschrift &quot;Energie 2 #&quot; summieren, d.h. es sollte dann folgendes ausgegeben werden (unter Vernachlässigung des Blocks &quot;Energie 1 #&quot;:</p>
<p>0.600<br />
0.800<br />
1.000<br />
1.200</p>
<p>Ich habe versucht eine &quot;*.find function&quot; mit String-Inhalt einzubauen, bevor die Werte bei &quot;werte[i][0] == 1.0&quot; und &quot;werte[i][0] == 2.0&quot; eingelesen werden, kriege es aber irgendwie nicht hin, obwohl es nur noch ein kleiner Schritt ist :(.</p>
<p>Ich wäre sehr dankbar, wenn mir jemand helfen könnte, wie ich es richtig zu parsen bzw. zu &quot;tokenizen&quot; habe.</p>
<p>Viele Dank im Voraus für jegliche Hilfe,</p>
<p>ThOr_Asgard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2514383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2514383</guid><dc:creator><![CDATA[ThOr_Asgard]]></dc:creator><pubDate>Mon, 07 Nov 2016 15:51:03 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen einer Datei und Übergabe an Array ab einer bestimmten Zeile on Mon, 07 Nov 2016 14:58:34 GMT]]></title><description><![CDATA[<p>Der Code sieht einigermaßen furchtbar aus (was soll y.B. die <code>while(in.good())</code> -Schleife?), dennoch sollte man das schnell einbauen können:</p>
<p>Ersetze</p>
<pre><code>while(getline(in, line)) 
        {
</code></pre>
<p>Durch:</p>
<pre><code>bool inErgebnis2 = false;
        while(getline(in, line)) 
        {             
            if (boost::begins_with(line, &quot;Ergebnis &quot;)) {
                inErgebnis2 = boost::begins_with(line, &quot;Ergebnis 2 #&quot;));
            }
            if (!inErgebnis2) continue;
</code></pre>
<p>(und <code>#include &lt;boost/algorithm/string.hpp&gt;</code> )</p>
<p>Alles ungetestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2514388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2514388</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Mon, 07 Nov 2016 14:58:34 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen einer Datei und Übergabe an Array ab einer bestimmten Zeile on Mon, 07 Nov 2016 15:39:39 GMT]]></title><description><![CDATA[<p>Vielen Dank schon mal für den Hinweis wob! Ich hatte auch schon daran gedacht an dieser Stelle mit &quot;bool&quot; es einzulesen, bekam aber als Fehlermeldung segmentation fault heraus.</p>
<p>Mich würde aber interessieren, ob es eine andere Lösung gibt, ohne dass ich &quot;Boost&quot; Header benutzen muss!?</p>
<p>Vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2514403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2514403</guid><dc:creator><![CDATA[ThOr_Asgard]]></dc:creator><pubDate>Mon, 07 Nov 2016 15:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen einer Datei und Übergabe an Array ab einer bestimmten Zeile on Mon, 07 Nov 2016 15:54:55 GMT]]></title><description><![CDATA[<p>Klar geht das ohne. Das ist sehr einfach nachzubauen. Habe aber keine Lust dazu, wenns schon ne fertige Lösung gibt und überlasse dir das als Übung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2514414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2514414</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Mon, 07 Nov 2016 15:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen einer Datei und Übergabe an Array ab einer bestimmten Zeile on Mon, 07 Nov 2016 16:04:17 GMT]]></title><description><![CDATA[<p>Ähm, ich merke gerade, dass es starts_with statt begins_with heißt. Verdammt, immer diese unterschiedlichen String-Bibliotheken! Das kommt davon, wenn man ohne IDE im Forumseditor programmiert <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2514416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2514416</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Mon, 07 Nov 2016 16:04:17 GMT</pubDate></item></channel></rss>