<?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[[solved]Formatierte Datei lesen?]]></title><description><![CDATA[<p>Hallo, wie kann ich eine Formatierte Datei wie z.B.</p>
<pre><code>Erstes Element|Zweites Element|Drittes Element|1.66|6.4|6
</code></pre>
<p>leicht einlesen, wobei die Zahlen auch in entsprechende double oder int Variablen gespeichert werden?</p>
<p>Kann man das irgendwie über fstream.read() lösen?? Weil so wirklich komme ich da grad nicht auf des Rätsels Lösung... <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="😞"
    /> Ich nehme auch gerne ein Tutorial oder ähnliches <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>Danke schon mal im voraus.<br />
Blackskyliner</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270391/solved-formatierte-datei-lesen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 09:20:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270391.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Jul 2010 20:04:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Sun, 11 Jul 2010 20:43:50 GMT]]></title><description><![CDATA[<p>Hallo, wie kann ich eine Formatierte Datei wie z.B.</p>
<pre><code>Erstes Element|Zweites Element|Drittes Element|1.66|6.4|6
</code></pre>
<p>leicht einlesen, wobei die Zahlen auch in entsprechende double oder int Variablen gespeichert werden?</p>
<p>Kann man das irgendwie über fstream.read() lösen?? Weil so wirklich komme ich da grad nicht auf des Rätsels Lösung... <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="😞"
    /> Ich nehme auch gerne ein Tutorial oder ähnliches <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>Danke schon mal im voraus.<br />
Blackskyliner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924757</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Sun, 11 Jul 2010 20:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Sun, 11 Jul 2010 20:16:14 GMT]]></title><description><![CDATA[<p>Ich lenke Deine Aufmerksamkeit mal gerne auf std::string::find_first_of()<br />
<a href="http://www.cppreference.com/wiki/string/find_first_of" rel="nofollow">http://www.cppreference.com/wiki/string/find_first_of</a><br />
Damit lassen sich solche strings super zerlegen :).</p>
<p>edit:<br />
Alternativ Konsolenprogramm mit wxWidgets:</p>
<pre><code class="language-cpp">wxStringTokenizer tokens(theString, &quot;|&quot;);
wxString token1 = tokens.GetNextToken();
wxString token2 = tokens.GetNextToken();
</code></pre>
<p>rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924764</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 11 Jul 2010 20:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Sun, 11 Jul 2010 20:36:17 GMT]]></title><description><![CDATA[<p>Wenn du allerdings schon einen Stream hast, wäre <a href="http://www.cplusplus.com/reference/string/getline/" rel="nofollow">getline</a> noch besser geeignet, dort kann man optional ein Trennzeichen als 3. Parameter angeben.<br />
Das könnte dann so aussehen:</p>
<pre><code class="language-cpp">fstream file;
string s;

while(std::getline(file, s, '|'))
    ...;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1924765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924765</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 11 Jul 2010 20:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Sun, 11 Jul 2010 20:25:30 GMT]]></title><description><![CDATA[<p>Danke ipsec zusammen mit einem vector und meiner über stringbuffer realisierten convert funktion für string to int, double, etc. fluppt das super, ich danke dir. <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>Das andere ist auch interessant, jedoch muss die Lösung ohne wx auskommen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924767</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Sun, 11 Jul 2010 20:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Sun, 11 Jul 2010 20:38:06 GMT]]></title><description><![CDATA[<p>Hab grade gemerkt, dass er mir jedoch bei diese Lösung hier:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
T convert(string s)
{
	std::stringstream stream(s);
	T temp;

	stream &gt;&gt; temp;
	return temp;
}
void loadText(){
	string singleResult;
	vector&lt;string&gt; results;

	tStud einStudent;
	fstream f(&quot;test2.txt&quot;, ios::in);
	while(f.good()){
		while(std::getline(f, singleResult, '|')) 
			results.push_back(singleResult);

		einStudent.name = results[0];
		einStudent.matrikel = convert&lt;int&gt;(results[1]);
		einStudent.beleg = convert&lt;int&gt;(results[2]);
		einStudent.pruef = convert&lt;int&gt;(results[3]);

		cout &lt;&lt; endl;
		// Ausgeben der Daten.
		cout &lt;&lt; einStudent.name &lt;&lt; endl;
		cout &lt;&lt; einStudent.matrikel &lt;&lt; endl;
		cout &lt;&lt; einStudent.beleg &lt;&lt; endl;
		cout &lt;&lt; einStudent.pruef &lt;&lt; endl;
	}
	f.close();
}
</code></pre>
<p>Die Datei sieht so hier z.B: aus:</p>
<pre><code>asd|1|2|3
dsa|4|5|6
qwe|6|7|8
fff|444|555|666
rrr|457|234|32
</code></pre>
<p>Jetzt da entsprechend mir alle in den Vector pushed... wie kann ich das ganze jetzt auch noch Zeilenweise limitieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924770</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Sun, 11 Jul 2010 20:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Sun, 11 Jul 2010 20:39:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string line;
std::ifstream in;

while(std::getline(in, line)) {
  std::istringstream parser(line);
  std::string token;

  while(std::getline(parser, token, '|')) {
    // Token verarbeiten
  }
}
</code></pre>
<p>std::istringstream befindet sich im Header &lt;sstream&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924772</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 11 Jul 2010 20:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Sun, 11 Jul 2010 20:43:34 GMT]]></title><description><![CDATA[<p>Ich danke dir seldon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924774</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Sun, 11 Jul 2010 20:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to [solved]Formatierte Datei lesen? on Mon, 12 Jul 2010 19:01:13 GMT]]></title><description><![CDATA[<p>Blackskyliner schrieb:</p>
<blockquote>
<p>..., wobei die Zahlen auch in entsprechende double oder int Variablen gespeichert werden?</p>
</blockquote>
<p>Hallo Blackskyliner,</p>
<p>wenn Du Zahlen willst, so solltest Du auch Zahlen lesen. Oder allgemeiner: lese das, was Du nachher haben willst.</p>
<p>Blackskyliner schrieb:</p>
<blockquote>
<p>Kann man das irgendwie über fstream.read() lösen??</p>
</blockquote>
<p>Nein, dass ist u.U. die schlechteste aller denkbaren Lösungen, denn die Methode 'read' liest unformatiert. Genau wie getline; wobei getline hier Sinn macht, um den ersten Namen bis zum '|'-Zeichen zu lesen, wie ipsec schon erwähnt hat.</p>
<p>.. ach so, und wenn man Studenten haben will, so sollte man Studenten lesen. Dazu baut man sich für die Struktur seiner Wahl:</p>
<pre><code class="language-cpp">struct tStud
{
    std::string name;
    int matrikel, beleg, pruef;
};
</code></pre>
<p>Streaming-operatoren für das Einlesen und Ausgeben.</p>
<pre><code class="language-cpp">std::istream&amp; operator&gt;&gt;( std::istream&amp; in, tStud&amp; stud );
std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, const tStud&amp; stud );
</code></pre>
<p>Implementierung kommt später (s.u.)</p>
<p>So ausgerüstet lassen sich jetzt die Studenten aus der Datei lesen:</p>
<pre><code class="language-cpp">int main()
{
    using namespace std;
    vector&lt; tStud &gt; studenten;
    ifstream f( &quot;test2.txt&quot; );
    for( tStud student; f &gt;&gt; student; )
        studenten.push_back( student );
    if( f.eof() )   // bis 'End Of File' gelesen -&gt; dann ist alles iO.
    {
        // alles richtig gelesen; hier weiter machen
        copy( studenten.begin(), studenten.end(), ostream_iterator&lt; tStud &gt;( cout, &quot;\n&quot; ) );
        cout &lt;&lt; endl;
    }
    return 0;
}
</code></pre>
<p>.. jetzt 'nur' noch die Implementierung, um einen(!) Studenten zu lesen und zu schreiben. Den Namen mit getline(...,'|') lesen und die int als int lesen. Bleiben nur noch die (lästigen) '|'-Zeichen zwischen den Zahlen. Ein Leerzeichen wäre hier die bessere Wahl gewesen.</p>
<pre><code class="language-cpp">std::istream&amp; pipe( std::istream&amp; in ) // liest das '|'-Zeichen; falls keines kommt, geht der Stream in den Fehlerzustand
{
    char c;
    if( in &gt;&gt; c &amp;&amp; c != '|' )
        in.setstate( std::ios_base::failbit );
    return in;
}
std::istream&amp; operator&gt;&gt;( std::istream&amp; in, tStud&amp; stud ) // Student einlesen
{
    // Format z.B.: &quot;dsa|4|5|6&quot;
    return getline( in &gt;&gt; std::ws, stud.name, '|' ) &gt;&gt; stud.matrikel &gt;&gt; pipe &gt;&gt; stud.beleg &gt;&gt; pipe &gt;&gt; stud.pruef;
}
std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, const tStud&amp; stud ) // Student ausgeben
{
    const char pipe = '|';
    return out &lt;&lt; stud.name &lt;&lt; pipe &lt;&lt; stud.matrikel &lt;&lt; pipe &lt;&lt; stud.beleg &lt;&lt; pipe &lt;&lt; stud.pruef;
}
</code></pre>
<p>Die notwendigen includes sind:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt; // copy
#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt; // ostream_iterator
#include &lt;string&gt;
#include &lt;vector&gt;
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1925235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1925235</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 12 Jul 2010 19:01:13 GMT</pubDate></item></channel></rss>