<?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[Probleme beim Einlesen]]></title><description><![CDATA[<p>Hallo <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="🙂"
    /></p>
<p>ich muss für eine Hausarbeit für die Uni aus zwei Dateien jeweils Werte aus Spalten einlesen.</p>
<pre><code># Kommentar
# Kommentar 
# Kommentar
# Kommentar
3020.81108 14.082 0.006      
3021.83499 14.044 0.006      
3023.69700 14.030 0.006      
...
</code></pre>
<pre><code>void read_data(vector&lt;vector&lt;double&gt; &gt; &amp;dataset){

  ifstream in;  
  in.open(&quot;lmc.dat&quot;, ios::out);
  if(in.is_open()!=1)cout&lt;&lt;&quot;Datei konnte nicht geöffnet werden!&quot;&lt;&lt;endl;

  int i=0;
  double t;
  double X_t;
  double sigma;
  while(!in.eof()){
    in&gt;&gt;t;
    in&gt;&gt;X_t;
    in&gt;&gt;sigma;
    dataset.push_back(vector&lt;double&gt;());
    dataset[i].push_back(t);//Zeit                                               
    dataset[i].push_back(X_t);//Signal   
    dataset[i].push_back(sigma);//Signal 

    i++;
  }

}
</code></pre>
<p>Diese Funktion schafft es die Werte auszulesen, wenn ich vorher die Kommentarzeilen manuell entferne. Das ist aber in der Hausarbeit nicht zulässig. Wie schaffe ich es, dass mit # beginnende Zeilen ignoriert werden?</p>
<p>Die andere Datei sieht folgendermaßen aus:</p>
<pre><code># Kommentar
# Kommentar
   1.00000000      0.822350740     -0.291915804    
   2.00000000       2.59992409       1.19528222    
   3.00000000       1.06593728      0.250372231    
   4.00000000     -0.361742496     -0.242994726    
   7.00000000      0.319537908      0.513922453    
   8.00000000     -0.471693277     -0.476872563    
...
</code></pre>
<p>Im Gegensatz zur ersten Datei sind die Spalten nicht durch Tabs getrennt, sondern durch Leertasten (sogar vor der ersten Spalte). Hier versagt mein Programm auf ganzer Linie.</p>
<p>Ich muss eine Funktion schreiben, die beide Dateien einlesen kann. Wie kann ich das am besten machen? <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="🙂"
    /></p>
<p>Vielen Dank schonmal!!!</p>
<p>LG</p>
<p>F</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/327376/probleme-beim-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 10:45:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327376.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Aug 2014 21:51:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme beim Einlesen on Thu, 07 Aug 2014 21:51:02 GMT]]></title><description><![CDATA[<p>Hallo <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="🙂"
    /></p>
<p>ich muss für eine Hausarbeit für die Uni aus zwei Dateien jeweils Werte aus Spalten einlesen.</p>
<pre><code># Kommentar
# Kommentar 
# Kommentar
# Kommentar
3020.81108 14.082 0.006      
3021.83499 14.044 0.006      
3023.69700 14.030 0.006      
...
</code></pre>
<pre><code>void read_data(vector&lt;vector&lt;double&gt; &gt; &amp;dataset){

  ifstream in;  
  in.open(&quot;lmc.dat&quot;, ios::out);
  if(in.is_open()!=1)cout&lt;&lt;&quot;Datei konnte nicht geöffnet werden!&quot;&lt;&lt;endl;

  int i=0;
  double t;
  double X_t;
  double sigma;
  while(!in.eof()){
    in&gt;&gt;t;
    in&gt;&gt;X_t;
    in&gt;&gt;sigma;
    dataset.push_back(vector&lt;double&gt;());
    dataset[i].push_back(t);//Zeit                                               
    dataset[i].push_back(X_t);//Signal   
    dataset[i].push_back(sigma);//Signal 

    i++;
  }

}
</code></pre>
<p>Diese Funktion schafft es die Werte auszulesen, wenn ich vorher die Kommentarzeilen manuell entferne. Das ist aber in der Hausarbeit nicht zulässig. Wie schaffe ich es, dass mit # beginnende Zeilen ignoriert werden?</p>
<p>Die andere Datei sieht folgendermaßen aus:</p>
<pre><code># Kommentar
# Kommentar
   1.00000000      0.822350740     -0.291915804    
   2.00000000       2.59992409       1.19528222    
   3.00000000       1.06593728      0.250372231    
   4.00000000     -0.361742496     -0.242994726    
   7.00000000      0.319537908      0.513922453    
   8.00000000     -0.471693277     -0.476872563    
...
</code></pre>
<p>Im Gegensatz zur ersten Datei sind die Spalten nicht durch Tabs getrennt, sondern durch Leertasten (sogar vor der ersten Spalte). Hier versagt mein Programm auf ganzer Linie.</p>
<p>Ich muss eine Funktion schreiben, die beide Dateien einlesen kann. Wie kann ich das am besten machen? <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="🙂"
    /></p>
<p>Vielen Dank schonmal!!!</p>
<p>LG</p>
<p>F</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412479</guid><dc:creator><![CDATA[LaTeXian]]></dc:creator><pubDate>Thu, 07 Aug 2014 21:51:02 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Einlesen on Thu, 07 Aug 2014 23:06:05 GMT]]></title><description><![CDATA[<p>Ich würde das ungefähr so machen:</p>
<pre><code>struct data
{
    data(double t_, double x_t_, double sigma_)
        : t(t_), x_t(t_), sigma(sigma_)
    { }

    double t;
    double x_t;
    double sigma;
};

std::vector&lt;data&gt; read_data()
{
    std::vector&lt;data&gt; data;
    std::ifstream input(&quot;in.txt&quot;);
    std::string line;
    double t, x_t, sigma;
    while ( std::getline(input, line) )
    {      
        if ( line[0] != '#' )
        {
            std::istringstream is(line);
            is &gt;&gt; t &gt;&gt; x_t &gt;&gt; sigma;
            data.emplace_back(t, x_t, sigma);
        }
    }

    return data;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2412484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412484</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 07 Aug 2014 23:06:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Einlesen on Fri, 08 Aug 2014 07:33:59 GMT]]></title><description><![CDATA[<p>icarus macht es etwas umständlich. Ich schlage</p>
<pre><code>#include &lt;vector&gt;
#include &lt;sstream&gt; // Für Dateistreams fstream
#include &lt;limits&gt;
#include &lt;iostream&gt;

struct data
{
	double t;
	double x_t;
	double sigma;
};

std::istream&amp; operator&gt;&gt;( std::istream&amp; is, data&amp; d )
{
	return is &gt;&gt;d.t &gt;&gt;d.x_t &gt;&gt;d.sigma;
}

std::ostream&amp; operator&lt;&lt;( std::ostream&amp; os, data const&amp; d )
{
	return os &lt;&lt;d.t &lt;&lt;d.x_t &lt;&lt;d.sigma;
}

int main()
{
	/// Folgender Stream soll den Dateistream simulieren:
	std::istringstream stream
	{
R&quot;(# Kommentar
# Kommentar
# Kommentar
# Kommentar
3020.81108 14.082 0.006
3021.83499 14.044 0.006
3023.69700 14.030 0.006 )&quot;
	};

	std::vector&lt;data&gt; data_vector;

	for (data d; stream &gt;&gt; std::ws;)
	{
		if (stream.peek() == '#')
			stream.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' );
		else if (stream &gt;&gt; d)
			data_vector.push_back(d);
		else break;
	}

	for (auto const&amp; d : data_vector)
		std::cout &lt;&lt; d &lt;&lt; '\n';
}
</code></pre>
<p>vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412507</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 08 Aug 2014 07:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Einlesen on Fri, 08 Aug 2014 07:40:59 GMT]]></title><description><![CDATA[<p>Oder falls du weißt dass die Kommentare alle hintereinander ganz am Anfang stehen:</p>
<pre><code>std::vector&lt;data&gt; data_vector;

	// Werner-Style
	while ((stream &gt;&gt; std::ws).peek() == '#')
		stream.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n');

	std::copy( std::istream_iterator&lt;data&gt;{stream}, {}, std::back_inserter(data_vector) );

	for (auto const&amp; d : data_vector)
		std::cout &lt;&lt; d &lt;&lt; '\n';
</code></pre>
<p>Zusätzlich noch die Header <code>&lt;algorithm&gt;</code> und <code>&lt;iterator&gt;</code> einbinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412508</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 08 Aug 2014 07:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Einlesen on Fri, 08 Aug 2014 09:14:21 GMT]]></title><description><![CDATA[<p>Ich empfehle putback.</p>
<pre><code class="language-cpp">while(!in.eof()){
    char c; // Testzeichen
    in &gt;&gt; c;
    if (c == '#') {
      in.ignore('\n', std::numeric_limits&lt;std::streamsize&gt;::max()); // ignoriere die Zeile
      continue;
    }
    in.putback(c); // lege das gelesene Zeichen zurück
    in&gt;&gt;t;
    in&gt;&gt;X_t;
    in&gt;&gt;sigma;
    dataset.push_back(vector&lt;double&gt;());
    dataset[i].push_back(t);//Zeit                                               
    dataset[i].push_back(X_t);//Signal   
    dataset[i].push_back(sigma);//Signal 

    i++;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2412518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412518</guid><dc:creator><![CDATA[putback]]></dc:creator><pubDate>Fri, 08 Aug 2014 09:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim Einlesen on Sat, 09 Aug 2014 13:21:52 GMT]]></title><description><![CDATA[<p>Vielen, vielen Dank für die Hilfe!!<br />
Ich habe mich letztendlich für putback entschieden, da dies die Lösung ist, die ich am einfachsten nachvollziehen konnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2412685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2412685</guid><dc:creator><![CDATA[LaTeXian]]></dc:creator><pubDate>Sat, 09 Aug 2014 13:21:52 GMT</pubDate></item></channel></rss>