<?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[Über IStream einlesen und sortieren]]></title><description><![CDATA[<p>Hallo Community!</p>
<p>Ich habe ein Problem bzgl. istream einlesen mit kleinen Stolpersteinen:</p>
<p>Das Programm soll über einen Istream (Kommandozeile oder File) eine PersonenListe (über Struct) erstellen (mit Hilfe von Push/Pop Funktionen). Das funktioniert auch ALLES bis jetzt. Nur einen kleinen Teil an der Aufgabe bekomme ich nicht hin. Beim einlesen der Personendaten, KÖNNEN die Daten nicht nur nebeneinader durch \0 getrennt sein.<br />
Sondern auch durch Line Feeds oder Kommata.</p>
<p>Auszug aus der Aufgabenstellung:</p>
<blockquote>
<p>Beispiel für die Eingabe:</p>
<p>Nachname1, Vorname1, Geburtsdatum1,<br />
Nachname2, Vorname2 ,<br />
Geburtsdatum2<br />
Nachname3<br />
,Vorname3<br />
Geburtsdatum3</p>
</blockquote>
<p>Wie ihr seht - durch Kommata, Whitespaces und Line Feeds zerpflückt - Realitätsnahe.</p>
<p>Ich hatte auch einige Ideen mit isalnum nach zeichen zu suchen. Aber Istreams hab ich erst seit einer Woche zu tun und kenne ihre &quot;unbegrezten Möglichkeiten&quot; noch nicht ganz. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Das einlesen habe ich über eine Funktion geregelt. Momentan sieht sie so aus, dass die Funktion nur sauber einlesen kann durch Whitespaces getrennt und mit abschließendem Enter.</p>
<pre><code class="language-cpp">void feed (istream &amp; rein, PersonenListenElement * ple){
        rein &gt;&gt; ple-&gt;person.Nachname;
        rein &gt;&gt; ple-&gt;person.Vorname;
        rein &gt;&gt; ple-&gt;person.Geburtsdatum;
}
</code></pre>
<p>Über jegliche Vorschläge bin ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179832/über-istream-einlesen-und-sortieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 01:59:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179832.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Apr 2007 16:28:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Wed, 25 Apr 2007 16:28:49 GMT]]></title><description><![CDATA[<p>Hallo Community!</p>
<p>Ich habe ein Problem bzgl. istream einlesen mit kleinen Stolpersteinen:</p>
<p>Das Programm soll über einen Istream (Kommandozeile oder File) eine PersonenListe (über Struct) erstellen (mit Hilfe von Push/Pop Funktionen). Das funktioniert auch ALLES bis jetzt. Nur einen kleinen Teil an der Aufgabe bekomme ich nicht hin. Beim einlesen der Personendaten, KÖNNEN die Daten nicht nur nebeneinader durch \0 getrennt sein.<br />
Sondern auch durch Line Feeds oder Kommata.</p>
<p>Auszug aus der Aufgabenstellung:</p>
<blockquote>
<p>Beispiel für die Eingabe:</p>
<p>Nachname1, Vorname1, Geburtsdatum1,<br />
Nachname2, Vorname2 ,<br />
Geburtsdatum2<br />
Nachname3<br />
,Vorname3<br />
Geburtsdatum3</p>
</blockquote>
<p>Wie ihr seht - durch Kommata, Whitespaces und Line Feeds zerpflückt - Realitätsnahe.</p>
<p>Ich hatte auch einige Ideen mit isalnum nach zeichen zu suchen. Aber Istreams hab ich erst seit einer Woche zu tun und kenne ihre &quot;unbegrezten Möglichkeiten&quot; noch nicht ganz. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Das einlesen habe ich über eine Funktion geregelt. Momentan sieht sie so aus, dass die Funktion nur sauber einlesen kann durch Whitespaces getrennt und mit abschließendem Enter.</p>
<pre><code class="language-cpp">void feed (istream &amp; rein, PersonenListenElement * ple){
        rein &gt;&gt; ple-&gt;person.Nachname;
        rein &gt;&gt; ple-&gt;person.Vorname;
        rein &gt;&gt; ple-&gt;person.Geburtsdatum;
}
</code></pre>
<p>Über jegliche Vorschläge bin ich sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273399</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Apr 2007 16:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Thu, 26 Apr 2007 23:05:29 GMT]]></title><description><![CDATA[<p>Hi, du hast zwei Möglichkeiten:<br />
1.) Mit getline(rein,ple-&gt;person.Nachname,',') bis zum Komma oder anderes gewünschtes Zeichen einlesen.<br />
2.) Alle in einen std::string packen und mit std::replace drüberlaufen und gewünschte Zeichen mit ' ' ersetzen und dann Daten zB mit Hilfe eines stringstreams rausholen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274281</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 26 Apr 2007 23:05:29 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Fri, 27 Apr 2007 08:48:17 GMT]]></title><description><![CDATA[<p>Danke für deine Antwort KasF!</p>
<p>Getline zu benutzen kam mir auch schon in den Sinn. Doof dabei ist, dass ich nur ein Abbruchkriterium haben kann.<br />
Das mit String kann ich mir vorstellen, hallte ich jedoch für sehr umständlich, die PersonenDaten sind alles char-Arrays. Das müsste ich dann wieder kopieren usw.</p>
<p>Mein Prof. meinte gestern, ich müsste dass dann doch zeichweise einlesen und auswerten über cin.get o.Ä. - Mist! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274407</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Apr 2007 08:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Fri, 27 Apr 2007 10:54:23 GMT]]></title><description><![CDATA[<p>DaDaUrka schrieb:</p>
<blockquote>
<p>Das mit String kann ich mir vorstellen, hallte ich jedoch für sehr umständlich, die PersonenDaten sind alles char-Arrays. Das müsste ich dann wieder kopieren usw.</p>
</blockquote>
<p>Das macht nichts. Am besten wäre es aber wenn du von Anfang an überall std::string hättest.</p>
<pre><code class="language-cpp">/*
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;algorithm&gt;
#include &lt;iterator&gt;
*/
ifstream file(&quot;testo.txt&quot;);

string textFile = string(istreambuf_iterator&lt;char&gt;(file), istreambuf_iterator&lt;char&gt;());
replace(textFile.begin(),textFile.end(),',',' ');

istringstream newFile(textFile);

PersonenListenElement a; feed(newFile,&amp;a);
</code></pre>
<p>Frage an die Experten:<br />
Wieso funktionier das nur so:</p>
<pre><code class="language-cpp">string textFile = string(istreambuf_iterator&lt;char&gt;(file), istreambuf_iterator&lt;char&gt;());
</code></pre>
<p>und nicht so:</p>
<pre><code class="language-cpp">string textFile(istreambuf_iterator&lt;char&gt;(file), istreambuf_iterator&lt;char&gt;());
</code></pre>
<p>???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274486</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Apr 2007 10:54:23 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Fri, 27 Apr 2007 10:49:45 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Preisfrage an die Experten:<br />
Wieso funktionier das nur so:</p>
<pre><code class="language-cpp">string textFile = string(istreambuf_iterator&lt;char&gt;(file), istreambuf_iterator&lt;char&gt;());
</code></pre>
<p>und nicht so:</p>
<pre><code class="language-cpp">string textFile(istreambuf_iterator&lt;char&gt;(file), istreambuf_iterator&lt;char&gt;());
</code></pre>
<p>???</p>
</blockquote>
<p><a href="http://www.gotw.ca/gotw/075.htm" rel="nofollow">http://www.gotw.ca/gotw/075.htm</a> - reicht das als Antwort?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274489</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 27 Apr 2007 10:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Fri, 27 Apr 2007 11:03:38 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p><a href="http://www.gotw.ca/gotw/075.htm" rel="nofollow">http://www.gotw.ca/gotw/075.htm</a></p>
</blockquote>
<p>Danke <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="👍"
    /><br />
( Kam vllt so rüber als ob ich das wüsste und euch testen wollte, aber dem war/ist nicht so :), habe mich nur gewundert wieso das nicht funktionierte )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274501</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Apr 2007 11:03:38 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Fri, 27 Apr 2007 11:32:30 GMT]]></title><description><![CDATA[<p>Ich will jetzt nicht faul rüberkommen, aber der Testtreiber funzt wunderbar. Und will jetzt nicht alles auf string umschreiben. Zudem war es ja in der Aufgabenstellung gewollt, über iostreams ein-/auszulesen.</p>
<p>Ich werde mal am we das mal zeichenweise probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274521</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Apr 2007 11:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Fri, 27 Apr 2007 11:37:48 GMT]]></title><description><![CDATA[<p>DaDaUrka schrieb:</p>
<blockquote>
<p>Zudem war es ja in der Aufgabenstellung gewollt, über iostreams ein-/auszulesen.</p>
</blockquote>
<p>Was hat das eine mit dem anderen zu tun? char-Arrays sind Relikte aus C, in C++ kommst du mit std::string wesentlich schneller und einfacher zum Ziel als mit manuellen char*-Manipulationen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274526</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 27 Apr 2007 11:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Fri, 27 Apr 2007 11:41:15 GMT]]></title><description><![CDATA[<p>Du musst auch nicht alles auf string umschreiben, eher gesagt gar nichts. Deine Struktur kann noch normal mit char* aufgaubt sein.</p>
<p>Aber machs lieber dann zeichenweise, damit sich dein Prof nicht wundert, woher du sowas zusammen gekratzt hast. Zeichenweise sollte auch nicht schwer sein. Einfach bei Problemen hier wieder fragen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274530</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 27 Apr 2007 11:41:15 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Sun, 29 Apr 2007 13:19:20 GMT]]></title><description><![CDATA[<p>Also ich habe jetzt folgendes probiert:</p>
<pre><code class="language-cpp">void PersonenListe::feed (istream &amp; rein, PersonenListenElement * ple){

        char buffer('\0');

        int i(0);
        while(1){
                rein.get(buffer);
                if(isalnum(buffer)) break;
        }

        ple-&gt;person.Nachname[0] = buffer;       // Erstes Zeichen auf Nachname schieben 
        i=1;                                    // i auf 1 damit beim 2. Zeichen von Nachnae anschliesst

        while(1){
                rein.get(buffer);

                // Nachname bis Whitespace oder , einlesen 
                if(isalnum(buffer)){
                        ple-&gt;person.Nachname[i] = buffer;
                        i++;
                }else break;
        }

        while(1){
                rein.get(buffer);               // Zum Vornamen springen
                if(isalnum(buffer))break;
        }

        ple-&gt;person.Vorname[0]=buffer;          // Erstes Zeichen in Vornamen schieben
        i=1;                                    // i auf 1 damit beim 2. Zeichen von Vorname anschliesst

        while(1){
                rein.get(buffer);

                // Vorname bis Whiitespace oder , einlesen 
                if(isalnum(buffer)){
                        ple-&gt;person.Vorname[i] = buffer;
                        i++;
                }else break;
        }

        while(1){
                rein.get(buffer);
                if(isalnum(buffer))break;
        }                                       // Zum Geburstdatum springen

        ple-&gt;person.Geburtsdatum[0]=buffer;     // Erstes Zeichen in Geburtsdatum schieben
        i=1;                                    // i auf 1 damit beim 2. Zeichen von Geburtsdatum anschliesst

        while(1){
                rein.get(buffer);

                // Geburtsdatum einlesen 
                // Hier ist auch schon der Knackpunkt:
                // Der Istream schmeißt immer irgendeinen Mist noch hinten an das datum dran. Wieso?
                // Der DDD zeigt manchmal ein P bzw.A an ich glaube der will den Line Feed als char 
                // noch akzeptieren und übersetzt ihn in ein Zeichen!?
                if(buffer&gt;='0' &amp;&amp; buffer &lt;='9' || buffer == '.'){
                        ple-&gt;person.Geburtsdatum[i] = buffer;
                        i++;
                }else break;
        }
}
</code></pre>
<p>Das funzt auch alles soweit, jedoch schmeißt mir das Programm hinten an den Geburtstag noch den Line Feed glaube dran und übersetzt das Zeichen.<br />
Deswegen sieht die Ausgabe so aus:</p>
<p>Bei einem Block:</p>
<pre><code>----- Ausgabe -----
Max, Schmidt, 25.06.1986������,
</code></pre>
<p>Bei mehr Blöcken:</p>
<pre><code>----- Ausgabe -----
Max, Schmidt, 25.06.1986������A,
Britta��������, Prause, 12.11.1987,
</code></pre>
<p>Was könnte das sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275660</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 29 Apr 2007 13:19:20 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Sun, 29 Apr 2007 15:22:36 GMT]]></title><description><![CDATA[<p>Uiuiui, dein Code sieht nicht gerade sicher und auch sauber aus, aber egal wenn man so frickelt lernt man eh am besten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Das Problem kommt daher, dass du deine char*'s nicht mit einer 0 abschließst.</p>
<p>Beispiel beim ersten:</p>
<pre><code class="language-cpp">while(1){
                rein.get(buffer);

                // Nachname bis Whitespace oder , einlesen
                if(isalnum(buffer)){
                        ple-&gt;person.Nachname[i] = buffer;
                        i++;
                }else break;
        }
ple-&gt;person.Nachname[i] = 0; // Zeichenkette abschließen
</code></pre>
<p>Bei den anderen dann auch ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275743</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 29 Apr 2007 15:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Sun, 29 Apr 2007 15:39:05 GMT]]></title><description><![CDATA[<p>mhhh okay.</p>
<p>Ich nehme an manuell eine terminierende Null selbst rein machen wäre Stümper haft... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275756</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 29 Apr 2007 15:39:05 GMT</pubDate></item><item><title><![CDATA[Reply to Über IStream einlesen und sortieren on Tue, 08 May 2007 21:03:32 GMT]]></title><description><![CDATA[<p>Topic mehr oder weniger gelöst:</p>
<p>Hab ganz vergessen noch meinen letzten Stand zu posten.</p>
<pre><code class="language-cpp">void PersonenListe::feed (istream &amp; rein, PersonenListenElement * ple){
	// Eine unelegante aber robuste Art(glaube ich zumindest) einzulesen
	// Fuer Vorschlaege bin ich sehr offen. :-)

	// Ueberschreibe alle Werte, weil er sonst Mist reinschreibt
	for(int j=0;j&lt;=20;j++){
		ple-&gt;person.Nachname[j]='\0';
	}
  	for(int j=0;j&lt;=20;j++){
		ple-&gt;person.Vorname[j]='\0';
	}
  	for(int j=0;j&lt;=11;j++){
		ple-&gt;person.Geburtsdatum[j]='\0';
	}

 	char buffer('\0');

	int i(0);
	while(1){
		rein.get(buffer);
		if(isalnum(buffer)) break;
	}

	ple-&gt;person.Nachname[0] = buffer;	// Erstes Zeichen auf Nachname schieben	
	i=1;					// i auf 1 damit beim 2. Zeichen von Nachnae anschliesst

	while(1){
		rein.get(buffer);
		// Nachname bis Whitespace oder , einlesen 
		if(isalnum(buffer)){
			if(i==20){break; cerr &lt;&lt; endl &lt;&lt; &quot;Nachname zu lang.&quot; &lt;&lt; endl;}
			ple-&gt;person.Nachname[i] = buffer;
			i++;				
		}else break;
	}

	while(1){
		rein.get(buffer); 		// Zum Vornamen springen
		if(isalnum(buffer))break;
	}

	ple-&gt;person.Vorname[0]=buffer;		// Erstes Zeichen in Vornamen schieben
	i=1;					// i auf 1 damit beim 2. Zeichen von Vorname anschliesst

	while(1){
		rein.get(buffer);

		// Vorname bis Whiitespace oder , einlesen 
		if(isalnum(buffer)){ 
			if(i==20){break; cerr &lt;&lt; endl &lt;&lt; &quot;Vorname zu lang.&quot; &lt;&lt; endl;}
			ple-&gt;person.Vorname[i] = buffer;
			i++;
		}else break;
	}

	while(1){
		rein.get(buffer);
		if(isalnum(buffer))break;
	}					// Zum Geburstdatum springen

	ple-&gt;person.Geburtsdatum[0]=buffer;	// Erstes Zeichen in Geburtsdatum schieben
	i=1;					// i auf 1 damit beim 2. Zeichen von Geburtsdatum anschliesst

//	ple-&gt;person.Geburtsdatum[11]='\0';	// Der schreibt immer einen Mist hinten rein, vielleicht weil Person explizit nicht intialisiert ist!?

	while(1){
		rein.get(buffer);

		// Geburtsdatum einlesen 
		if(buffer&gt;='0' &amp;&amp; buffer &lt;='9' || buffer == '.'){ 
			if(i==11){break; cerr &lt;&lt; endl &lt;&lt; &quot;Geburtsdatum zu lang.&quot; &lt;&lt; endl;}
			ple-&gt;person.Geburtsdatum[i] = buffer;
			i++;
		}else break;
	}
}
</code></pre>
<p>Funzt soweit auch. Wie gesagt, sieht nicht grad toll aus, aber es klappt. In einem Jahr lache ich darüber, oder weine... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281229</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 08 May 2007 21:03:32 GMT</pubDate></item></channel></rss>