<?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[Einzelne Werte aus Datei summieren]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
Ich habe ein Modell geschrieben bei dem ich aus bestehenden Wetterdaten auf den Niederschlag zugreifen muss. Allerdings haben die Ausgangsdateien eine stündliche Auflösung und ich muss diese erst einmal als wöchentliche Werte in eine neue Datei schreiben.<br />
Die Ausgangsdatei sieht wie folgt aus und geht über 200 Jahre.(1,7 Mio Zeilen)</p>
<blockquote>
<p>Y M D H Rain Temp<br />
0 0 0 0 0 0.534247<br />
0 0 0 1 0 -0.896021<br />
0 0 0 2 0 -1.79512<br />
0 0 0 3 0 -2.10179<br />
0 0 0 4 0 -1.79512<br />
0 0 0 5 0 -0.896021</p>
</blockquote>
<p>Die erste Zeile muss ignoriert werden da dort ja nur Y M D H Rain Temp steht.<br />
Ab der zweiten Zeile muss ich auf das 5te Element jeder Zeile zugreifen und für eine Woche summieren, d.h. für 168(24*7) Zeilen immer den Wert summieren. Dann in die Ausgabe Datei speichern und den Wert wieder 0 setzen.<br />
Allerdings haben die Daten 365 Tage, ergo 52 Wochen plus 1 Tag, daher würde sich das Jahr immer um 1 Tag verschieben.<br />
Deswegen wird in der letzten Woche 1 Tag dazu gerechnet also 24 weitere Zeilen.<br />
So weit so gut. Mein Problem ist aber das ich noch nie Daten aus Dateien eingelesen habe und ich keine Ahnung habe wie ich einzelne Spalten und darin einzelne Elemente anspreche. Ich hoffe ihr könnt mir da weiter helfen.</p>
<p>Hier ist mein Code.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;
//-----------------------------------------------------------------------------------
int main()

// Öffnen/erstellen von Input und Output File
//-----------------------------------------------------------------------------------
{
    ifstream dateiRead;  /* Objekt der Eingabe-Datei */
    ofstream dateiWrite; /* Objekt der Ergebnis-Datei */

    dateiRead.open(&quot;sandveld_200_norm_0_cool.txt&quot;, ios::in);
       if (!dateiRead.good())
          {
            cout &lt;&lt; &quot;Konnte Datei zum Lesen nicht oeffnen&quot; &lt;&lt;endl;
            return -1;
          }

    dateiWrite.open(&quot;sandveld_200_norm_0_cool_w.txt&quot;, ios::out); // ios:: app würde daten anhängen
       if (!dateiWrite.good())
          {
              cout &lt;&lt; &quot;Konnte Datei zum Schreiben nicht oeffnen.&quot; &lt;&lt; endl;
              return -1;
          }
//Einlesen aus Input und speichern in Output      
//--------------------------------------------------------------------------------------------------------
    dateiWrite &lt;&lt; &quot;Y&quot; &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;W&quot; &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;Rain&quot; &lt;&lt; &quot;\n&quot; ;
    double w_rain;

//Schleife für Jahr
    for (int year = 0; year&lt;200; year++)
    {
//Schleife für Wochen
        for (int week = 0; week&lt;52; week++)
        {
            w_rain = 0;

            { //&lt;--Schleife für die nächsten 168 (24*7) Zeilen (entspricht einer Woche) aus Input Datei und einlesen des 5ten Wertes pro Zeile
                 w_rain = w_rain; //+ Wert aus Inputdatei...Wie?
//--------------------------------------------------------------------------------------------------------
                 //Die Daten haben 365 Tage, ergo 52 Wochen plus 1 Tag, daher würde sich das Jahr immer um 1 Tag verschieben.
                 //Deswegen wird in der letzten Woche 1 Tag dazu gerechnet also 24 weitere Zeilen.
                 if (week == 51)
                 {
                     //&lt;--Schleife für die nächsten 24 Zeilen
                     w_rain = w_rain ; //+ Wert aus Inputdatei
                 }
//--------------------------------------------------------------------------------------------------------
            }
            dateiWrite &lt;&lt; year &lt;&lt; &quot;\t&quot; &lt;&lt; week &lt;&lt; &quot;\t&quot; &lt;&lt; w_rain &lt;&lt; &quot;\n&quot; ;
            //fprintf(dateiWrite,&quot;%5.2d %5.2d %5.2f \n &quot;,year,week,w_rain); //warum funktioniert das nicht?
        }
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/326728/einzelne-werte-aus-datei-summieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 00:20:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326728.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Jul 2014 08:49:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einzelne Werte aus Datei summieren on Fri, 04 Jul 2014 08:50:58 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
Ich habe ein Modell geschrieben bei dem ich aus bestehenden Wetterdaten auf den Niederschlag zugreifen muss. Allerdings haben die Ausgangsdateien eine stündliche Auflösung und ich muss diese erst einmal als wöchentliche Werte in eine neue Datei schreiben.<br />
Die Ausgangsdatei sieht wie folgt aus und geht über 200 Jahre.(1,7 Mio Zeilen)</p>
<blockquote>
<p>Y M D H Rain Temp<br />
0 0 0 0 0 0.534247<br />
0 0 0 1 0 -0.896021<br />
0 0 0 2 0 -1.79512<br />
0 0 0 3 0 -2.10179<br />
0 0 0 4 0 -1.79512<br />
0 0 0 5 0 -0.896021</p>
</blockquote>
<p>Die erste Zeile muss ignoriert werden da dort ja nur Y M D H Rain Temp steht.<br />
Ab der zweiten Zeile muss ich auf das 5te Element jeder Zeile zugreifen und für eine Woche summieren, d.h. für 168(24*7) Zeilen immer den Wert summieren. Dann in die Ausgabe Datei speichern und den Wert wieder 0 setzen.<br />
Allerdings haben die Daten 365 Tage, ergo 52 Wochen plus 1 Tag, daher würde sich das Jahr immer um 1 Tag verschieben.<br />
Deswegen wird in der letzten Woche 1 Tag dazu gerechnet also 24 weitere Zeilen.<br />
So weit so gut. Mein Problem ist aber das ich noch nie Daten aus Dateien eingelesen habe und ich keine Ahnung habe wie ich einzelne Spalten und darin einzelne Elemente anspreche. Ich hoffe ihr könnt mir da weiter helfen.</p>
<p>Hier ist mein Code.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
using namespace std;
//-----------------------------------------------------------------------------------
int main()

// Öffnen/erstellen von Input und Output File
//-----------------------------------------------------------------------------------
{
    ifstream dateiRead;  /* Objekt der Eingabe-Datei */
    ofstream dateiWrite; /* Objekt der Ergebnis-Datei */

    dateiRead.open(&quot;sandveld_200_norm_0_cool.txt&quot;, ios::in);
       if (!dateiRead.good())
          {
            cout &lt;&lt; &quot;Konnte Datei zum Lesen nicht oeffnen&quot; &lt;&lt;endl;
            return -1;
          }

    dateiWrite.open(&quot;sandveld_200_norm_0_cool_w.txt&quot;, ios::out); // ios:: app würde daten anhängen
       if (!dateiWrite.good())
          {
              cout &lt;&lt; &quot;Konnte Datei zum Schreiben nicht oeffnen.&quot; &lt;&lt; endl;
              return -1;
          }
//Einlesen aus Input und speichern in Output      
//--------------------------------------------------------------------------------------------------------
    dateiWrite &lt;&lt; &quot;Y&quot; &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;W&quot; &lt;&lt; &quot;\t&quot; &lt;&lt; &quot;Rain&quot; &lt;&lt; &quot;\n&quot; ;
    double w_rain;

//Schleife für Jahr
    for (int year = 0; year&lt;200; year++)
    {
//Schleife für Wochen
        for (int week = 0; week&lt;52; week++)
        {
            w_rain = 0;

            { //&lt;--Schleife für die nächsten 168 (24*7) Zeilen (entspricht einer Woche) aus Input Datei und einlesen des 5ten Wertes pro Zeile
                 w_rain = w_rain; //+ Wert aus Inputdatei...Wie?
//--------------------------------------------------------------------------------------------------------
                 //Die Daten haben 365 Tage, ergo 52 Wochen plus 1 Tag, daher würde sich das Jahr immer um 1 Tag verschieben.
                 //Deswegen wird in der letzten Woche 1 Tag dazu gerechnet also 24 weitere Zeilen.
                 if (week == 51)
                 {
                     //&lt;--Schleife für die nächsten 24 Zeilen
                     w_rain = w_rain ; //+ Wert aus Inputdatei
                 }
//--------------------------------------------------------------------------------------------------------
            }
            dateiWrite &lt;&lt; year &lt;&lt; &quot;\t&quot; &lt;&lt; week &lt;&lt; &quot;\t&quot; &lt;&lt; w_rain &lt;&lt; &quot;\n&quot; ;
            //fprintf(dateiWrite,&quot;%5.2d %5.2d %5.2f \n &quot;,year,week,w_rain); //warum funktioniert das nicht?
        }
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406958</guid><dc:creator><![CDATA[krisbin]]></dc:creator><pubDate>Fri, 04 Jul 2014 08:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelne Werte aus Datei summieren on Fri, 04 Jul 2014 09:00:53 GMT]]></title><description><![CDATA[<p>Datei öffnen:</p>
<pre><code>ifstream in(&quot;dateiname.txt&quot;); //#include &lt;fstream&gt;
</code></pre>
<p>1. Zeile ignorieren:</p>
<pre><code>string dummy; //include &lt;string&gt;
getline(in, dummy);
</code></pre>
<p>aus den nächsten Zeilen die beiden letzten Werte lesen:</p>
<pre><code>int tmp;
int wertRain;
double wertTemp;
while(in &gt;&gt; tmp &gt;&gt; tmp &gt;&gt; tmp &gt;&gt; tmp &gt;&gt; wertRain &gt;&gt; wertTemp)
{
   machWasMitwertRainwertTemp();
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406960</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 04 Jul 2014 09:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelne Werte aus Datei summieren on Fri, 04 Jul 2014 09:35:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Ab der zweiten Zeile muss ich auf das 5te Element jeder Zeile zugreifen und für eine Woche summieren, d.h. für 168(24*7) Zeilen immer den Wert summieren.</p>
</blockquote>
<p>Meinst du vielleicht die sechste?</p>
<p>Ich mache jetzt zwei Annahmen: Alle Zahlen sind durch <strong>ein Leerzeichen</strong> getrennt. Am Anfang der Zeile gibt es <strong>keine</strong> Leerzeichen.</p>
<p>Dann kannste probieren, ein wenig effizienter als Belli ranzugehen, nämlich die Zahlen als Wörter behandeln die durch Leerzeichen getrennt sind.</p>
<pre><code>#include &lt;istream&gt;
#include &lt;limits&gt;

double extract_one_line( std::istream&amp; is )
{
	// ersten vier Spalten ignorieren
	for( unsigned i = 0; i != 4; ++i )
		is.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), ' ' );

	double d; is &gt;&gt; d;

	// letzte Spalte ignorieren
	is.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' );

	return d;
}

#include &lt;fstream&gt;
#include &lt;vector&gt;

int main()
{
	std::vector&lt;double&gt; weeklySum;
	weeklySum.reserve( 52*200 );

	std::ifstream stream(&quot;Datei.txt&quot;);
	stream.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' ); // first line

	while( stream )
	{
		for( unsigned week = 0; week != 52; ++week )
		{
			double sum = 0;
			for( unsigned hour = 0; hour != 168 &amp;&amp; stream; ++hour )
				sum += extract_one_line(stream);

			if( !stream )
				break;

			weeklySum.push_back( sum );
		}

		weeklySum.back() += extract_one_line(stream);
	}
}
</code></pre>
<p>(total ungetestet! habe ich lediglich heruntergetippt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406968</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 04 Jul 2014 09:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelne Werte aus Datei summieren on Fri, 04 Jul 2014 10:48:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;boost/range/istream_range.hpp&gt;
#include &lt;boost/range/adaptors.hpp&gt;
int main() {
  std::cin.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n');
  int day=0, week=0, year=0;
  double rainsum=0;
  for (double rain : boost::istream_range&lt;double&gt;(std::cin).advance_begin(5) | boost::adaptors::strided(6)) {
    rainsum += rain;
    if (++day == 52*7 || (day%7!=0 &amp;&amp; day != 52*7 + 1)) continue;
    std::cout &lt;&lt; year &lt;&lt; '\t' &lt;&lt; week &lt;&lt; '\t' &lt;&lt; rainsum &lt;&lt; '\n';
    rainsum=0;
    if (day == 52*7 + 1) {
      day=0;
      week=0;
      ++year;
    } else {
      ++week;
    }
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2406977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406977</guid><dc:creator><![CDATA[debloated]]></dc:creator><pubDate>Fri, 04 Jul 2014 10:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelne Werte aus Datei summieren on Fri, 04 Jul 2014 10:52:29 GMT]]></title><description><![CDATA[<p>Vielen Dank euch beiden das ihr so schnell geantwortet habt.<br />
Der Vorschlag von Belli funktioniert genau so wie ich es haben wollte.<br />
Auch Dank an Arcoth. Ich versuch da mal am Wochenende durchzusteigen. Aber der Vorschlag von Belli reicht dafür das ich die Daten heute weiter nutzen kann.</p>
<p>Nur noch eine Frage:</p>
<p>Belli schrieb:</p>
<blockquote>
<p>Datei öffnen:<br />
...</p>
<pre><code>string dummy; //include &lt;string&gt;
getline(in, dummy);
</code></pre>
<p>...</p>
</blockquote>
<p>Was macht genau der Dummy bzw. wozu braucht man ihn? Ohne funktioniert es bei mir nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406978</guid><dc:creator><![CDATA[krisbin]]></dc:creator><pubDate>Fri, 04 Jul 2014 10:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to Einzelne Werte aus Datei summieren on Fri, 04 Jul 2014 11:00:25 GMT]]></title><description><![CDATA[<p>Die zwei Zeilen lesen die erste Zeil aus der Datei in dummy ein. Somit beginnt das Lesen erst danach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2406983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2406983</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 04 Jul 2014 11:00:25 GMT</pubDate></item></channel></rss>