<?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[Datensätze aus Datei auslesen und sortieren - Wer kann helfen?]]></title><description><![CDATA[<p>Hallo,<br />
habe ein kleines Programm für meinen Unterricht geschrieben. Das Programm soll eine Art Telefonbuch sein, um Namen und Vornamen und Telefonnummern anzusehen oder gezielt zu suchen.</p>
<p>Wenn ich einen neuen Datensatz hinzufüge, müssten die Datensätze ja alphabetisch neu sortiert werden, also ausgelesen aus der Datei und dann neu nach Name oder anderen Kriterien sortiert werden. Wie kann ich das Sortieren der in der Datei abgelegten Datensätze organisieren.</p>
<p>Bisher habe ich mit fopen die Datei geöffnet und mit fwrite den Datensatz zurückgeschrieben. Die Suche erfolgte über fread. Sortiert habe ich bisher stets umständlich mit dem Bubblesort, also dem Dreieckstausch. Das darf alles nicht zu kompliziert sein.</p>
<p>Mein Problem ist nun, dass ich den Strukturarray nicht mehr als Array habe, wenn er aus der Datei ausgelesen worden ist. Der Datensatz wird ja Satzweise ausgelesen, nicht in Form eines Arrays.<br />
Hier ein Auszug des Programms - das Auslesen der gespeicherten Datensätze:</p>
<p>dat=fopen(&quot;Telefonbuch.dat&quot;,&quot;r&quot;);<br />
cout &lt;&lt; &quot;Ausgabe der gespeicherten Daten &quot; &lt;&lt; endl&lt;&lt;endl;<br />
cout &lt;&lt; &quot; Name Vorname Telefonnummer&quot; &lt;&lt; endl;<br />
cout &lt;&lt; &quot;===================================================&quot; &lt;&lt; endl;<br />
while(fread(&amp;P,sizeof(P),1,dat)!=0)<br />
{<br />
cout &lt;&lt; setw(15) &lt;&lt; <a href="http://P.Name" rel="nofollow">P.Name</a><br />
&lt;&lt; setw(15) &lt;&lt; P.Vorname<br />
&lt;&lt; right&lt;&lt; setw(20)&lt;&lt; P.Telnummer &lt;&lt; endl;<br />
}<br />
getch();<br />
fclose(dat);</p>
<p>Wie kann ich die Datensätze nun alphabetisch sortieren?</p>
<p>Kann jemand helfen?? DANKE!!!<a href="http://www.c-plusplus.net/forum/images/smiles/smile.gif" rel="nofollow">http://www.c-plusplus.net/forum/images/smiles/smile.gif</a><br />
<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/topic/210993/datensätze-aus-datei-auslesen-und-sortieren-wer-kann-helfen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 20:57:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210993.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Apr 2008 14:07:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 14:07:22 GMT]]></title><description><![CDATA[<p>Hallo,<br />
habe ein kleines Programm für meinen Unterricht geschrieben. Das Programm soll eine Art Telefonbuch sein, um Namen und Vornamen und Telefonnummern anzusehen oder gezielt zu suchen.</p>
<p>Wenn ich einen neuen Datensatz hinzufüge, müssten die Datensätze ja alphabetisch neu sortiert werden, also ausgelesen aus der Datei und dann neu nach Name oder anderen Kriterien sortiert werden. Wie kann ich das Sortieren der in der Datei abgelegten Datensätze organisieren.</p>
<p>Bisher habe ich mit fopen die Datei geöffnet und mit fwrite den Datensatz zurückgeschrieben. Die Suche erfolgte über fread. Sortiert habe ich bisher stets umständlich mit dem Bubblesort, also dem Dreieckstausch. Das darf alles nicht zu kompliziert sein.</p>
<p>Mein Problem ist nun, dass ich den Strukturarray nicht mehr als Array habe, wenn er aus der Datei ausgelesen worden ist. Der Datensatz wird ja Satzweise ausgelesen, nicht in Form eines Arrays.<br />
Hier ein Auszug des Programms - das Auslesen der gespeicherten Datensätze:</p>
<p>dat=fopen(&quot;Telefonbuch.dat&quot;,&quot;r&quot;);<br />
cout &lt;&lt; &quot;Ausgabe der gespeicherten Daten &quot; &lt;&lt; endl&lt;&lt;endl;<br />
cout &lt;&lt; &quot; Name Vorname Telefonnummer&quot; &lt;&lt; endl;<br />
cout &lt;&lt; &quot;===================================================&quot; &lt;&lt; endl;<br />
while(fread(&amp;P,sizeof(P),1,dat)!=0)<br />
{<br />
cout &lt;&lt; setw(15) &lt;&lt; <a href="http://P.Name" rel="nofollow">P.Name</a><br />
&lt;&lt; setw(15) &lt;&lt; P.Vorname<br />
&lt;&lt; right&lt;&lt; setw(20)&lt;&lt; P.Telnummer &lt;&lt; endl;<br />
}<br />
getch();<br />
fclose(dat);</p>
<p>Wie kann ich die Datensätze nun alphabetisch sortieren?</p>
<p>Kann jemand helfen?? DANKE!!!<a href="http://www.c-plusplus.net/forum/images/smiles/smile.gif" rel="nofollow">http://www.c-plusplus.net/forum/images/smiles/smile.gif</a><br />
<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/1493621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493621</guid><dc:creator><![CDATA[kuwe]]></dc:creator><pubDate>Thu, 17 Apr 2008 14:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 14:33:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Erzeuge dir einen vector auf dem Typ deiner Telefonbucheinträge und füge in den deine eingelesenen Daten ein (mit push_back). Dann kannst du diesen vector sortieren z.Bsp. mit std::sort aus algorithm.<br />
Wie hast du denn deine Telefonbuchdaten jetzt gespeichert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493632</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 17 Apr 2008 14:33:06 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 16:20:25 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Erzeuge dir einen vector auf dem Typ deiner Telefonbucheinträge und füge in den deine eingelesenen Daten ein (mit push_back). Dann kannst du diesen vector sortieren z.Bsp. mit std::sort aus algorithm.<br />
Wie hast du denn deine Telefonbuchdaten jetzt gespeichert?</p>
</blockquote>
<p>Hallo und DANKE!! für die Antwort, allerdings ist deine Lösung wohl eine Nummer zu kompliziert für mich. Am besten ich zeige mein Programm. Ich habe es lediglich sequentiell gespeichert. Es ist ein Konsolenprogramm für Anfänger von einem Anfänger.</p>
<p>#include &lt;iostream.h&gt;<br />
#include &lt;iomanip.h&gt;<br />
#include &lt;conio.h&gt;<br />
//---------------------------------------------------------------------</p>
<p>struct Person<br />
{<br />
char Name[21];<br />
char Vorname[21];<br />
char Telnummer[15];<br />
};</p>
<p>int main()<br />
{</p>
<p>int i = 0;<br />
FILE *dat;<br />
char was, noch_ein;<br />
struct Person P;<br />
char Suchname[20];<br />
do<br />
{<br />
clrscr();<br />
cout &lt;&lt; &quot;Programm: Erfassung von Telefonnummern &quot; &lt;&lt; endl;<br />
cout &lt;&lt; &quot;========================================&quot; &lt;&lt; endl &lt;&lt; endl;<br />
cout &lt;&lt; &quot;Eingabe beenden mit ESC &quot; &lt;&lt; endl;<br />
cout &lt;&lt; &quot;--------------------------------------&quot; &lt;&lt; endl;<br />
/* Menü, mit ESC beenden <em>/<br />
cout&lt;&lt;&quot;\n\n\nDateiverwaltung Telefonbuch &quot;;<br />
cout&lt;&lt;&quot;\n\nWas moechten Sie tun &quot;;<br />
cout &lt;&lt;&quot;\nNeue Namen zufuegen ==&gt; 1&quot;;<br />
cout &lt;&lt;&quot;\nNamen ansehen ==&gt; 2&quot;;<br />
cout &lt;&lt;&quot;\nNamen suchen ==&gt; 3&quot;;<br />
cout &lt;&lt;&quot;\nDialog beenden ==&gt; Y &quot;;<br />
cin &gt;&gt;was;<br />
noch_ein='j'; /</em> für Schleifen - Laufbedingung */<br />
while (noch_ein=='j' &amp;&amp; was=='1')<br />
{<br />
dat=fopen(&quot;Telefonbuch.dat&quot;,&quot;a+&quot;);<br />
cout &lt;&lt; &quot;Eingabe neuer Stammdaten &quot; &lt;&lt;endl;<br />
cout &lt;&lt; &quot;Name : &quot;;<br />
cin &gt;&gt; <a href="http://P.Name" rel="nofollow">P.Name</a>;<br />
cout &lt;&lt; &quot;Vorname : &quot;;<br />
cin &gt;&gt; P.Vorname;<br />
cout &lt;&lt; &quot;Telefonnummer : &quot;;<br />
cin &gt;&gt; P.Telnummer;<br />
fwrite(&amp;P,sizeof(P),1,dat);<br />
cout &lt;&lt; &quot;Noch einen? (j/n) &quot;;<br />
cin &gt;&gt; noch_ein;<br />
fclose(dat);<br />
clrscr();<br />
i++;<br />
}<br />
if(was=='2')<br />
{<br />
dat=fopen(&quot;Telefonbuch.dat&quot;,&quot;r&quot;);<br />
cout &lt;&lt; &quot;Ausgabe der gespeicherten Daten &quot; &lt;&lt; endl&lt;&lt;endl;<br />
cout &lt;&lt; &quot; Name Vorname Telefonnummer&quot; &lt;&lt; endl;<br />
cout &lt;&lt; &quot;===============================================&quot; &lt;&lt; endl;<br />
while(fread(&amp;P,sizeof(P),1,dat)!=0)<br />
{<br />
cout &lt;&lt; setw(15) &lt;&lt; <a href="http://P.Name" rel="nofollow">P.Name</a><br />
&lt;&lt; setw(15) &lt;&lt; P.Vorname<br />
&lt;&lt; right&lt;&lt; setw(20)&lt;&lt; P.Telnummer &lt;&lt; endl;<br />
}<br />
getch();<br />
fclose(dat);<br />
}<br />
if(was=='3')<br />
{<br />
dat=fopen(&quot;Telefonbuch.dat&quot;,&quot;r&quot;);<br />
cout &lt;&lt; &quot;Welchen Namen suchen Sie? &quot;;<br />
cin &gt;&gt; Suchname;</p>
<p>cout &lt;&lt; &quot; Name Vorname Telefonnummer&quot; &lt;&lt; endl;<br />
cout &lt;&lt; &quot;===============================================&quot; &lt;&lt; endl;<br />
while(fread(&amp;P,sizeof(P),1,dat)!=0)<br />
{<br />
if(strcmp(Suchname,<a href="http://P.Name" rel="nofollow">P.Name</a>)==0)<br />
{<br />
cout &lt;&lt; left &lt;&lt; setw(15) &lt;&lt; <a href="http://P.Name" rel="nofollow">P.Name</a> &lt;&lt; left<br />
&lt;&lt; setw(15) &lt;&lt; P.Vorname<br />
&lt;&lt; right&lt;&lt; setw(20)&lt;&lt; P.Telnummer &lt;&lt; endl;<br />
}<br />
}<br />
getch();<br />
fclose(dat);<br />
}</p>
<p>}while(was!=89);<br />
return 0;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493712</guid><dc:creator><![CDATA[kuwe]]></dc:creator><pubDate>Thu, 17 Apr 2008 16:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 16:40:05 GMT]]></title><description><![CDATA[<p>dein freund heiss qsort</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493724</guid><dc:creator><![CDATA[au haua aua]]></dc:creator><pubDate>Thu, 17 Apr 2008 16:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 17:08:52 GMT]]></title><description><![CDATA[<p>au haua aua schrieb:</p>
<blockquote>
<p>dein freund heiss qsort</p>
</blockquote>
<p>Cooler wäre sortiertes Einfügen in eine verkettete Liste, dann kann man auf Sortierfunktionen wie qsort und co. verzichten.</p>
<p>Es schadet aber nicht, qsort mal kennen zu lernen:</p>
<pre><code class="language-cpp">#include &lt;stdlib.h&gt;

#define NAMELEN 64
#define TEL	32

struct Person
{
	char Name[NAMELEN+1];
	char Vorname[NAMELEN+1];
	char Tel[TEL+1];
}; 

void Show( struct Person* P, unsigned N )
{
	int i;
	for ( i=0; i&lt;N; i++ )
	printf( &quot;Name: %s\n&quot;, P[i].Name );
}

int compare( const void *a, const void *b )
{
   return strcmp( ((struct Person*)a)-&gt;Name, ((struct Person*)b)-&gt;Name );
}

void Sort( struct Person* P, unsigned N )
{
	 qsort( (void *)P, N, sizeof( struct Person ), compare );
}

#define N sizeof(P)/sizeof(*P)

int main(int argc, char* argv[])
{
	struct Person P[3] = {0};

	strcpy( P[0].Name, &quot;zzzz&quot; );
	strcpy( P[1].Name, &quot;kkk&quot; );
	strcpy( P[2].Name, &quot;aaa&quot; );

	Show( P, N );
	Sort( P, N );
	puts(&quot;*******************************&quot;);
	Show( P, N );

	return 0;

}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493747</guid><dc:creator><![CDATA[Big Brother]]></dc:creator><pubDate>Thu, 17 Apr 2008 17:08:52 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 17:32:48 GMT]]></title><description><![CDATA[<p>Leute, ihr seid im falschen Forum … hier ist C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493760</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 17 Apr 2008 17:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 17:50:00 GMT]]></title><description><![CDATA[<p>Hallo Big Brother,</p>
<p>vielen Dank für deinen konkreten Vorschlag - werde ich mal ausprobieren.</p>
<p>Schön, dass bei deiner Antwort keine Arroganz zu lesen war.</p>
<p>Danke nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493777</guid><dc:creator><![CDATA[kuwe]]></dc:creator><pubDate>Thu, 17 Apr 2008 17:50:00 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 18:50:16 GMT]]></title><description><![CDATA[<p>Wenn ich es unter C++ machen sollte, würde ich das irgendwie so versuchen:<br />
(Bin selbst noch am lernen, daher habe ich mich mal direkt an dem Problem versucht).</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;iomanip&gt;

struct CPerson
{
    std::string Name;
    std::string Vorname;
    std::string Telefonnummer;
};

//Listentemplate fuer Personen auspraegen
typedef std::list&lt;CPerson&gt;  CPersonenListe;

//Sortierkriterium festlegen (hier koennte mal auch weitere zum Sortieren z.B. nach Vorname anlegen)
bool SortiereNachName_Praedikat(const CPerson&amp; Datensatz1, const CPerson&amp; Datensatz2)
{
    return (Datensatz1.Name &lt; Datensatz2.Name);
}

int main()
{
    //Listenobjekt fuer Personendatensaetze anlegen
    CPersonenListe personenListe;

    //Stream zum Lesen aus Datei oeffnen
    std::ifstream DatenLeser(&quot;Telefonbuch.dat&quot;, std::ios_base::in);

    if(DatenLeser)
    {
        //aktuell gelesene Person
        CPerson aktuellerDatensatz;
        //Lese bis zum Ende der Datei
        while(!DatenLeser.eof())
        {
            //Name lesen
            DatenLeser &gt;&gt; aktuellerDatensatz.Name;
            //Vorname lesen
            DatenLeser &gt;&gt; aktuellerDatensatz.Vorname;
            //Tel.-Nr. lesen
            DatenLeser &gt;&gt; aktuellerDatensatz.Telefonnummer;
            //in Liste ablegen
            personenListe.push_back(aktuellerDatensatz);
        }
        //nach Name sortieren
        personenListe.sort(SortiereNachName_Praedikat);

        //ausgeben
        for(CPersonenListe::iterator iIter = personenListe.begin(); iIter != personenListe.end(); ++iIter)
        {
            std::cout   &lt;&lt; std::setw(16) &lt;&lt; std::left &lt;&lt; &quot;Name:&quot;          &lt;&lt; iIter-&gt;Name             &lt;&lt; '\n'
                        &lt;&lt; std::setw(16) &lt;&lt; std::left &lt;&lt; &quot;Vorname:&quot;       &lt;&lt; iIter-&gt;Vorname          &lt;&lt; '\n'
                        &lt;&lt; std::setw(16) &lt;&lt; std::left &lt;&lt; &quot;Telefonnummer:&quot; &lt;&lt; iIter-&gt;Telefonnummer    &lt;&lt; &quot;\n\n&quot;;
        }
    }
    else
    {
        //Ausgabe, falls Datenbank (Stream) nicht geoeffnet werden konnte
        std::cout &lt;&lt; &quot;Konnte Datei \&quot;Telefonbuch.dat\&quot; nicht oeffnen!\n&quot;;
    }

    //Lesestream schliessen
    DatenLeser.close();

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1493829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493829</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 17 Apr 2008 18:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to Datensätze aus Datei auslesen und sortieren - Wer kann helfen? on Thu, 17 Apr 2008 19:22:43 GMT]]></title><description><![CDATA[<p>Hallo Tachyon</p>
<p>Soweit reichen meine Kenntnisse noch nicht.</p>
<p>Das ist denke ich der Weg, den Baunstein vorgeschlagen hat. Ich werde demnächst versuchen, dein Programm nachvollziehen zu können. Dazu muss ich aber noch ein wenig mehr studieren (Das Buch ist schon bestellt)</p>
<p>Habe vielen Dank!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493861</guid><dc:creator><![CDATA[kuwe]]></dc:creator><pubDate>Thu, 17 Apr 2008 19:22:43 GMT</pubDate></item></channel></rss>