Sortierung eines ofstream Objekts



  • Hallo zusammen,
    ich bin gerade an einer Probeklausur dran und komme nicht weiter.
    Ich lese eine Textdatei 'vorwahlen.txt' ein diese enthält das komplette deutsche
    Telefonvorwahlenverzeichnis, wobei injeder Zeile der Name eines Ortes und die dazugehörige telefonvorwahl steht.

    Ich muss nun diese Date einlesen diese sortieren und in eine txt. Datei ausgeben.
    Meine txt. Datei ist leider unsortiert.

    #include <iostream>
    #include "Table.h";
    #include "Vorwahl.h";
    #include <fstream>
    
    using namespace std;
    
    void readFile(Table &tempTable);
    
    int main()
    {
    	Table tempTable;
    	readFile(tempTable);
    	tempTable.sortOrt();
    	tempTable.toString();
    
    	return 0;
    }
    
    void readFile(Table &tempTable)
    {
    	setlocale(LC_ALL, "");
    	Vorwahl tempVorwahl;
    
    	fstream inputFile("vorwahlen.txt", ios::in);
    	if (!inputFile)
    		cerr << "Datei konnte nicht geoeffnet werden !" << endl;
    
    	ofstream outFile("vorwahlen_neuu.txt", ios::out);
    	if (!outFile) { // overloaded ! operator
    		cerr << "File could not be opened" << endl;
    		exit(EXIT_FAILURE);
    	}
    
    	string ort, vorwahl;
    
    	while (inputFile.good())
    	{
    		getline(inputFile, ort, '\t');
    		tempVorwahl.setOrt(ort);
    
    		getline(inputFile, vorwahl, '\n');
    		tempVorwahl.setVorwahl(vorwahl);
    
    		tempTable.setVorwahl(tempVorwahl);
    		outFile <<ort << ".................................." << vorwahl << endl;
    
    	}
    
    }
    

  • Mod

    ombia schrieb:

    Meine txt. Datei ist leider unsortiert.

    Und das wundert dich warum? Nur fest dran zu glauben, ist leider nicht genug. Dein Programm unternimmt keinerlei Aktion, um auch nur im Ansatz irgendwas zu sortieren.

    Ein paar Bemerkungen:
    -Deine Funktionen und Objekte haben unklare Aufgaben. Du nennst eine Funktion readFile , aber die macht irgendwie alles. (Oder genauer: Sie macht zwar alles, was dein Programm ausmacht, was aber offensichtlich nicht das ist, was du dir wünscht. Kurz gesagt kopiert sie bloß eine Datei in eine andere und fügt an einigen Stellen jede Menge '.' ein.)
    -Deine Einlesen ist höchstwahrscheinlich falsch, jedenfalls passt es überhaupt nicht zu deiner Beschreibung, wie deine Eingabedatei aufgebaut ist. Ich würde eigentlich erwarten, dass deine Ausgabedatei nicht nur unsortiert ist, sondern auch ziemlich falsch formatiert. Fiel dir in dieser Hinsicht nichts auf?
    -Du machst auch den typischen "mein Lehrer hat mal vor 40 Jahren Programmieren gelernt und denkt C++ wäre genau so wie Pascal"-Fehler, dass du erst prüfst, ob deine letzte Einleseaktion erfolgreich war, dann wieder etwas weiter liest und dann unabhängig vom Erfolg oder Misserfolg die gelesenen Daten (oder im Fehlerfall eben Datenmüll) weiter verarbeitest.



  • ombia schrieb:

    Ich muss nun diese Date einlesen diese sortieren und in eine txt. Datei ausgeben.

    Nach welchem Kriterium soll da etwas sortiert werden?



  • Hallo mit der toString Funktion lass ich alles auf mein Konsolenfenster ausgeben.
    Dort wird auch alles sortiert ausgegeben mit richtiger Formatierung dank der toSort Funktion.

    Aber wenn ich dies als Ausgabedatei in txt. sortiert haben möchte, wird hier leider nur alles so ausgegeben wie es auch eingelesen wurde also unsortiert.
    Meine Konsolenausgabe:
    Aachen.........................0241
    Aachen-Kornelimuenster.........................02408
    Aalen.........................07361
    Aalen-Ebnat.........................07367
    Aarbergen.........................06120
    Abberode.........................034779
    Abenberg Mittelfr..........................09178
    Abenberg-Wassermungenau.........................09873
    Abensberg.........................09443
    Abtsgmuend.........................07366
    Achberg.........................08380
    Achern.........................07841
    Achim b.Bremen.........................04202
    Achterwehr.........................04340
    Adelberg.........................07166
    Adelebsen.........................05506
    Adelmannsfelden.........................07963
    Adelsdorf.........................09195
    Adelsheim.........................06291
    Adelshofen.........................09865
    Adenau.........................02691
    Adlkofen.........................08707
    Adorf (Vogtl.).........................037423
    Aerzen.........................05154
    Affing.........................08207
    Affinghausen.........................04247
    Aglasterhausen.........................06262
    Ahaus.........................02561
    Ahaus-Alstaette.........................02567
    Ahausen-Kirchwalsede.........................04269
    Ahlbeck.........................039775
    Ahlen Westf..........................02382
    Ahlerstedt.........................04166
    Ahnatal.........................05609
    Ahorn Baden.........................06296
    Ahrensboek.........................04525
    Ahrensboek-Gnissau.........................04556
    Ahrensburg.........................04102
    Aichach.........................08251
    Aichstetten Kr.Ravensburg.........................07565
    Aidenbach.........................08543
    ^CDrücken Sie eine beliebige Taste . . .

    meine ausgabedatei:
    Straelen..................................02834
    Hessisch Lichtenau..................................05602
    Kerpen-Horrem..................................02273
    Laichingen..................................07333
    Steinhagen Westf...................................05204
    Roehrmoos..................................08139
    Schwaebisch Gmuend..................................07171
    Untergriesbach..................................08593
    Hohenberg-Krusemark..................................039394
    Ringenwalde..................................039881
    Luebben..................................03546
    Neustadt(Sachs.)..................................03596
    Altdorf b.Nuernberg..................................09187
    Bindlach..................................09208
    Muenchsteinach..................................09166
    Baltrum..................................04939
    Wuestenrot..................................07945
    Oberndorf..................................036465
    Metschow..................................039994
    Bergen..................................03838
    Winnenden..................................07195
    Suederhastedt..................................04830
    Langen b.Bremerhaven..................................04743
    Walsrode-Kirchboitzen..................................05166
    Winsen-Toennhausen..................................04179
    Eching Niederbay...................................08709
    Bruchhausen-Vilsen..................................04252
    Luebeck..................................0451
    Schmoelln..................................039862
    Steyerberg..................................05764
    Westerburg Westerw...................................02663
    Vohenstrauss..................................09651
    Ostrau (Sachs.)..................................034324
    Au i.d.Hallertau..................................08752
    Welschen Ennest..................................02764



  • Wenn man die Daten sortiert, nachdem man sie ausgegeben hat, ist das nicht ungewöhnlich.


Log in to reply