<?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[Text einlesen und &amp;quot;scannen&amp;quot;]]></title><description><![CDATA[<p>Hallo Leute ,</p>
<p>ich habe eine Textdatei die ungefähr so aufgebaut ist :</p>
<pre><code>3

4

Text 1 
Text 2 
15.06.2015 14 Uhr
</code></pre>
<p>Allso immer einen int, eine Leerzeile, einen int, eine Leerzeile, 2 Zeilen kuren Txt, Date_Time , eine Leerzeile und dann wieder von vorne. Interessant für mich sind nur die beiden Textzeilen und das Datum/Zeit</p>
<p>Scheinbar Simpel, für die Pro´s ist es das wohl auch, aber ich bin mir nicht wirklich sicher wie ich das am besten einelsen soll.</p>
<p>Erster Gedanke war etwas wie :</p>
<pre><code>std::ifstream is (&quot;test.txt&quot; , ios_mode::in)

std::string line;

while(is)[

   int x;
   if (! (is &gt;&gt; x) ){
        is.clear();
        getline(is, line);
        // my_vec.push_back(line)   //später
    }
}
</code></pre>
<p>Aber das ist doch Käse so. Das war auch noch nie so wirklich meine Stärke.<br />
Kann mir mal jmd. ein paar Tipps geben und evtl. auch beschreiben wie man an sowas &quot;ran-geht&quot; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333335/text-einlesen-und-quot-scannen-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 06:45:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333335.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Jun 2015 14:59:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Text einlesen und &amp;quot;scannen&amp;quot; on Fri, 26 Jun 2015 14:59:57 GMT]]></title><description><![CDATA[<p>Hallo Leute ,</p>
<p>ich habe eine Textdatei die ungefähr so aufgebaut ist :</p>
<pre><code>3

4

Text 1 
Text 2 
15.06.2015 14 Uhr
</code></pre>
<p>Allso immer einen int, eine Leerzeile, einen int, eine Leerzeile, 2 Zeilen kuren Txt, Date_Time , eine Leerzeile und dann wieder von vorne. Interessant für mich sind nur die beiden Textzeilen und das Datum/Zeit</p>
<p>Scheinbar Simpel, für die Pro´s ist es das wohl auch, aber ich bin mir nicht wirklich sicher wie ich das am besten einelsen soll.</p>
<p>Erster Gedanke war etwas wie :</p>
<pre><code>std::ifstream is (&quot;test.txt&quot; , ios_mode::in)

std::string line;

while(is)[

   int x;
   if (! (is &gt;&gt; x) ){
        is.clear();
        getline(is, line);
        // my_vec.push_back(line)   //später
    }
}
</code></pre>
<p>Aber das ist doch Käse so. Das war auch noch nie so wirklich meine Stärke.<br />
Kann mir mal jmd. ein paar Tipps geben und evtl. auch beschreiben wie man an sowas &quot;ran-geht&quot; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457891</guid><dc:creator><![CDATA[cpp_offl]]></dc:creator><pubDate>Fri, 26 Jun 2015 14:59:57 GMT</pubDate></item><item><title><![CDATA[Reply to Text einlesen und &amp;quot;scannen&amp;quot; on Fri, 26 Jun 2015 15:09:35 GMT]]></title><description><![CDATA[<p>Wenn das Format wirklich immer so ist, und nicht etwa die Anzahl der Zeilen variiert, würde ich einfach die ersten 4 Zeilen mit ignore überspringen und dann die 3 gewünschten Zeilen einlesen. Brauchst du nur die Zeilen oder soll das Datum auch noch in irgendwas handhabbares konvertiert werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457893</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Fri, 26 Jun 2015 15:09:35 GMT</pubDate></item><item><title><![CDATA[Reply to Text einlesen und &amp;quot;scannen&amp;quot; on Fri, 26 Jun 2015 15:21:30 GMT]]></title><description><![CDATA[<pre><code>class Data {
public:
  Data() 
    : m_valid(false)
    , m_number1(0)
    , m_number2(0)
  {
  }

  virtual ~Data() {
  }

  void readFrom(std::istream&amp; stream) {
    stream &gt;&gt; m_number1;
    std::getline(stream, std::string());
    stream &gt;&gt; m_number2;
    std::getline(stream, std::string());
    std::getline(stream, std::string());
    std::getline(stream, m_line1);
    std::getline(stream, m_line2);
    std::getline(stream, m_dateTime);
  }

  void writeTo(std::ostream&amp; stream) const {
    if (m_valid) {
      // write data block
    }
  }

private:
  bool m_valid;

  int m_number1;
  int m_number2;

  std::string m_line1;
  std::string m_line2;

  std::string m_dateTime;
};

int _tmain(int argc, _TCHAR* argv[])
{
  std::ifstream file(&quot;C:/tmp/test.txt&quot;, std::ios_base::in);
  if (file.is_open()) {
    std::vector&lt;Data&gt; data_blocks;
    while (file.good()) {
      Data data;
      data.readFrom(file);
      data_blocks.push_back(data);
    }
  }
	return 0;
}
</code></pre>
<p>Wenn das Format vorgegeben ist, würde ich das auch in Code gießen.</p>
<p>Mein Vorschlag siehe oben (in VS2013 kompiliert) ... wobei das mit &quot;ignore&quot; die saubere Lösung ist anstelle von dem &quot;getline(stream,std::string())&quot;...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457895</guid><dc:creator><![CDATA[nebler]]></dc:creator><pubDate>Fri, 26 Jun 2015 15:21:30 GMT</pubDate></item><item><title><![CDATA[Reply to Text einlesen und &amp;quot;scannen&amp;quot; on Fri, 26 Jun 2015 15:22:46 GMT]]></title><description><![CDATA[<p>würde es mit isdigit und peek machen.<br />
in etwa so</p>
<pre><code class="language-cpp">void foo( std::istream&amp; s )
{
  while(s &gt;&gt; std::ws)
  {
    if(! std::isdigit(s.peek()) )
      return;

    while( std::isdigit(s.peek()) )
      s.ignore();
  };
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2457896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457896</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 26 Jun 2015 15:22:46 GMT</pubDate></item><item><title><![CDATA[Reply to Text einlesen und &amp;quot;scannen&amp;quot; on Fri, 26 Jun 2015 17:05:59 GMT]]></title><description><![CDATA[<p>Danke für die tipps und Codes, das hilft mir weiter.</p>
<blockquote>
<p>Wenn das Format wirklich immer so ist, und nicht etwa die Anzahl der Zeilen variiert, würde ich einfach die ersten 4 Zeilen mit ignore überspringen und dann die 3 gewünschten Zeilen einlesen.</p>
</blockquote>
<p>Ja, das Format ändert sich nicht wirklich. Wie kann ich die ersten Zeilen mit ignore übersrpingen ? MIr fällt jetzt da nur ein in einer for schleife ...</p>
<pre><code>for (int i = 0; i &lt; 4 ; ++i){
           is.ignore(256, '\n');
}
</code></pre>
<p>...aber so wird das nicht gemeint sein ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457900</guid><dc:creator><![CDATA[cpp_offl]]></dc:creator><pubDate>Fri, 26 Jun 2015 17:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Text einlesen und &amp;quot;scannen&amp;quot; on Fri, 26 Jun 2015 17:55:05 GMT]]></title><description><![CDATA[<p>cpp_offl schrieb:</p>
<blockquote>
<p>...aber so wird das nicht gemeint sein ?</p>
</blockquote>
<p>Wieso nicht? Ist natürlich ein bisschen ungünstig, wenn die Zeilen mehr als 256 Zeichen haben. Mit <code>std::numeric_limits&lt;std::streamsize&gt;::max()</code> als Länge überspringt ignore beliebig viele Zeichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457904</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 26 Jun 2015 17:55:05 GMT</pubDate></item><item><title><![CDATA[Reply to Text einlesen und &amp;quot;scannen&amp;quot; on Fri, 26 Jun 2015 22:43:45 GMT]]></title><description><![CDATA[<p>nebler schrieb:</p>
<blockquote>
<p>... wobei das mit &quot;ignore&quot; die saubere Lösung ist anstelle von dem &quot;getline(stream,std::string())&quot;...</p>
</blockquote>
<p>Vor allem auch weil <code>getline(stream,std::string())</code> nicht standardkonform ist und mit Compilern wie GCC oder Clang nicht kompilieren wird.<br />
MSVC frisst es trotzdem wie wir wissen, aber das ist halt ne nonstandard Extension.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457923</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 26 Jun 2015 22:43:45 GMT</pubDate></item></channel></rss>