<?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[Textdatei einlesen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin absoluter Anfänger was C++ angeht und ich muss eine Aufgabe lösen, bei der ich zwar eine gewisse Ahnung habe, wie man das machen soll, aber nicht, wie ich das in Programmiersprache umsetze.</p>
<p>Die Aufgabe: Ich soll ein Programm schreiben, welches die Datei <a href="http://www.panarin.de/student.txt" rel="nofollow">student.txt</a> zeilenweise einliest und sortiert nach folgendem Schema: Nachname, Vorname, Matrikelnummer, Notendurchschnitt und Geburtsjahr.</p>
<p>...und das Ganze natürlich noch in eine neue Datei schreibt.</p>
<p>Was ich da bis jetzt zusammengetippt habe ist:</p>
<pre><code>#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    int p;
    int matrikelnummer;
    int geburtsjahr;
    float note;
    string Vorname;
    string Name;
    string w; 
    string x;

    ifstream file;
    string s;
    file.open(&quot;student.txt&quot;);
    while (!file.eof())
    {
        getline(file, s);

        p=s.find(&quot;\t&quot;);

        w=s.substr(p,3).c_str();

    cout&lt;&lt;p&lt;&lt;endl;

    }
    file.close();
}
</code></pre>
<p>So, Datei zeilenweise mit der While-Schleife und getline (Zeile 21-23) einlesen klappt schon mal.</p>
<p>Meine Idee ist jetzt, mit dem Befehl p=s.find(&quot;\t&quot;); aus Zeile 25 die Datei nach Tabulatoren abzusuchen (in der Textdatei sind ausschließlich Tabulatoren enthalten, keine Leerzeichen).</p>
<p>Die Stellen, an denen ein Tabulator gefunden wird, habe ich mit p schon mal definiert.</p>
<p>Anschließend möchte ich jetzt mit der Verschiebungsfunktion s.substr(p,3).... die Wörter verschieben.</p>
<p>Wie ich jetzt weiter machen soll, entschließt sich meinem Wissensstand.<br />
Kann mir da jemand weiterhelfen?</p>
<p>Danke schon mal im Voraus für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/333267/textdatei-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 23:57:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/333267.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Jun 2015 22:10:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Textdatei einlesen on Mon, 22 Jun 2015 22:10:19 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich bin absoluter Anfänger was C++ angeht und ich muss eine Aufgabe lösen, bei der ich zwar eine gewisse Ahnung habe, wie man das machen soll, aber nicht, wie ich das in Programmiersprache umsetze.</p>
<p>Die Aufgabe: Ich soll ein Programm schreiben, welches die Datei <a href="http://www.panarin.de/student.txt" rel="nofollow">student.txt</a> zeilenweise einliest und sortiert nach folgendem Schema: Nachname, Vorname, Matrikelnummer, Notendurchschnitt und Geburtsjahr.</p>
<p>...und das Ganze natürlich noch in eine neue Datei schreibt.</p>
<p>Was ich da bis jetzt zusammengetippt habe ist:</p>
<pre><code>#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    int p;
    int matrikelnummer;
    int geburtsjahr;
    float note;
    string Vorname;
    string Name;
    string w; 
    string x;

    ifstream file;
    string s;
    file.open(&quot;student.txt&quot;);
    while (!file.eof())
    {
        getline(file, s);

        p=s.find(&quot;\t&quot;);

        w=s.substr(p,3).c_str();

    cout&lt;&lt;p&lt;&lt;endl;

    }
    file.close();
}
</code></pre>
<p>So, Datei zeilenweise mit der While-Schleife und getline (Zeile 21-23) einlesen klappt schon mal.</p>
<p>Meine Idee ist jetzt, mit dem Befehl p=s.find(&quot;\t&quot;); aus Zeile 25 die Datei nach Tabulatoren abzusuchen (in der Textdatei sind ausschließlich Tabulatoren enthalten, keine Leerzeichen).</p>
<p>Die Stellen, an denen ein Tabulator gefunden wird, habe ich mit p schon mal definiert.</p>
<p>Anschließend möchte ich jetzt mit der Verschiebungsfunktion s.substr(p,3).... die Wörter verschieben.</p>
<p>Wie ich jetzt weiter machen soll, entschließt sich meinem Wissensstand.<br />
Kann mir da jemand weiterhelfen?</p>
<p>Danke schon mal im Voraus für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457490</guid><dc:creator><![CDATA[Roman_]]></dc:creator><pubDate>Mon, 22 Jun 2015 22:10:19 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei einlesen on Mon, 22 Jun 2015 22:32:21 GMT]]></title><description><![CDATA[<p>Warum getline?<br />
while(file&gt;&gt;Vorname &gt;&gt; Name ...)</p>
<p>Tja, weiter? Struct mit Daten in std::vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457491</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 22 Jun 2015 22:32:21 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei einlesen on Mon, 22 Jun 2015 22:51:39 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Warum getline?<br />
while(file&gt;&gt;Vorname &gt;&gt; Name ...)</p>
</blockquote>
<p>Ich vermute mal, dass auch Leerzeichen in den Namen vorkommen können. Eine mögliche Lösung wäre, die locale entsprechend zu ändern, damit Leerzeichen nicht mehr als whitespace gelten, aber ich denke, wesentlich anfängerfreundlicher wäre es, den Trennzeichenparameter von getline zu nutzen. getline ist ja offensichtlich schon bekannt:</p>
<pre><code>while(getline(file, Vorname, '\t') &amp;&amp; getline(file, Nachname, '\t') &amp;&amp; getline(file, w, '\t') &amp;&amp; getline(file, x, '\n'))
</code></pre>
<p>(man beachte, dass das letzte getline nach einem Zeilenumbruch sucht)</p>
<p>Der Threadersteller wird hoffentlich auch bemerken, dass keiner von uns beiden den <code>while(!eof)</code> -Quatsch gemacht hat. Das <code>while(!eof)</code> -Schema ist logisch falsch. Erstens prüft es nur auf eof, nicht auf alle möglichen Fehler (so wie es die Beispiele in den Antworten tun). Zweiten, und das wiegt viel schwerer, prüft es zum falschen Zeitpunkt: Vor dem Leseversuch! Aber erst ein gescheiterter Leseversuch setzt ein Fehlerflag. Das heißt, im Falle eines Fehler werden fröhlich falsche Daten verarbeitet, erst beim erneuten Prüfen der Schleifenbedingung wird der Fehler entdeckt, dann aber ist es zu spät. Man vergleiche:<br />
<a href="http://ideone.com/ZSNsMA" rel="nofollow">http://ideone.com/ZSNsMA</a> -&gt; Eingabe &quot;1 2 3 4 &quot;, Ausgabe &quot;12344&quot;<br />
<a href="http://ideone.com/XnUJFq" rel="nofollow">http://ideone.com/XnUJFq</a> -&gt; Eingabe &quot;1 2 3 4 &quot;, Ausgabe &quot;1234&quot;<br />
Wer dir das beigebracht hat, hat keine Ahnung von C++ oder anderen, C-artigen Sprachen, und sollte nicht weiter als Quelle zum Lernen benutzt werden. Leider wird dieser Fehler immer noch oft durch schlechte Lehrer und Bücher verbreitet. Falsches zu lernen ist schlimmer, als gar nichts zu lernen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2457492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457492</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 22 Jun 2015 22:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei einlesen on Tue, 23 Jun 2015 07:56:48 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>manni66 schrieb:</p>
<blockquote>
<p>Warum getline?<br />
while(file&gt;&gt;Vorname &gt;&gt; Name ...)</p>
</blockquote>
<p>Ich vermute mal, dass auch Leerzeichen in den Namen vorkommen können.</p>
</blockquote>
<p>Ja, da aber</p>
<p>Roman_ schrieb:</p>
<blockquote>
<p>(in der Textdatei sind ausschließlich Tabulatoren enthalten, keine Leerzeichen).</p>
</blockquote>
<p>ist die Aufgabe möglicherweise bewusst einfach gehalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457521</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 23 Jun 2015 07:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei einlesen on Tue, 23 Jun 2015 09:40:26 GMT]]></title><description><![CDATA[<p>Sorry für OT:</p>
<p>Wenn ich mir die <a href="http://www.panarin.de/student.txt" rel="nofollow">verlinkte Datei</a> anschaue und Namen wie <em>Josef Stalin</em> oder <em>Charles Manson</em> lese, kann ich gar nicht so viel fressen, wie ich kotzen möchte...<br />
Das ist nicht witzig und auch nicht cool.</p>
<p>Wie arm, respekt- und geschichtslos muss man sein, um die Namen dieser Menschen in der üblichen &quot;Programmieren Sie eine Studentenverwaltung&quot;-Übung zu benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457534</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 23 Jun 2015 09:40:26 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei einlesen on Tue, 23 Jun 2015 11:49:09 GMT]]></title><description><![CDATA[<p>@manni<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a></p>
<p>Danke an euch Beiden. Habt mir sehr geholfen, ich hab das mit dem von SeppJ zur Verfügung gestellten Code gemacht und das Ganze dann in eine neue Datei schreiben lassen, allerdings nicht durch Vektoren, sondern ganz normal per Schreibbefehl</p>
<pre><code>file&lt;&lt;xx&lt;&lt;&quot;\t&quot;&lt;&lt;xx&lt;&lt;endl;
</code></pre>
<p>Und das hat auch geklappt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457548</guid><dc:creator><![CDATA[Roman_]]></dc:creator><pubDate>Tue, 23 Jun 2015 11:49:09 GMT</pubDate></item><item><title><![CDATA[Reply to Textdatei einlesen on Tue, 23 Jun 2015 12:29:28 GMT]]></title><description><![CDATA[<p>Und wie wird sortiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2457549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2457549</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 23 Jun 2015 12:29:28 GMT</pubDate></item></channel></rss>