Zeilenumbruch beim Auslesen aus Datei entferenen
-
Hallo zusammen,
damit die einzelnen Daten beim Schreiben in eine Datei untereinander stehen habe ich mit jeweils mit fputs("\n",MeineDatei); einen Zeilenumbruch eingefügt. Das klappt soweit ganz gut, die Datei sieht genau so aus, wie ich es haben möchte.
Beim Einlesen der Daten wird allerdings das Retung mit eingelesen. Jetzt habe ich das Problem, dass bei erneutem Speichern hinter jedem ein zwei Returns stehen.
Sprich: nach dem Einlesen muss das Return entfernt werden. Bis jetzt habe ich noch keine funktionierende Lösung gefunden. Wer kann helfen?case '8'://write dataset to file gPos=1; MeineDatei = fopen ("D:\\testDB.txt", "w+"); for (gPos=1; gPos<21; gPos++) { fputs(AdrDB[gPos].Name, MeineDatei); fputs("\n",MeineDatei); //Zeilenumschaltung fputs(AdrDB[gPos].Strasse, MeineDatei); fputs("\n",MeineDatei); fputs(AdrDB[gPos].Ort, MeineDatei); fputs("\n",MeineDatei); }Der Nachfolgende Code soll die Datei einlesen funktioniert auch, aber das Return ist wird immer mit in das Array geschrieben.
case '9'://import datasets from file to current session gPos=1; FILE *MeineDatei; MeineDatei = fopen ("D:\\testDB.txt", "r"); if (MeineDatei==NULL) { system("cls"); cout<<"Fehler beim Lesen."<<endl; cout<<"Return -> zur\x81 \bck zum Hauptmen\x81!"<<endl; getchar(); } else { for (gPos=1; gPos<21; gPos++) { system("cls"); cout<<"Datei erfolgreich ge\x94 \bffnet"<<endl; fgets(AdrDB[gPos].Name, 40, MeineDatei); //hier muss irgendwie das Return gelöscht werden oder? fgets(AdrDB[gPos].Strasse, 40, MeineDatei); fgets(AdrDB[gPos].Ort, 40, MeineDatei); } if (gPos==21) { system("cls"); cout<<"alle Datens\x84tze testDB.txt in aktuelle Sitzung geladen."<<endl; cout<<"Return -> zur\x81 \bck zum Hauptmen\x81!"; getchar(); fclose(MeineDatei); } } break;
-
Dein Code ist a) extrem kompliziert, und b) C und nicht C++.
Das geht viel einfacher:#include <fstream> #include <string> //... std::ifstream reader("in_file.txt"); std::ofstream writer("out_file.txt"); std::string line; while(std::getline(reader, line) && writer) { //ggf. irgendwas mit line machen writer << line << '\n'; } //...
-
Hallo Tachion, merci für Deine schnelle Antwort. Dieses kleine Programm ist der Versuch mir C++ mit einem etwas betagtem Skript beizubringen. ifstram und readline etc. werden hier gar nicht behandelt. Scheint mir aber auch einfacher zu sein. Kannst Du mir Literattur (möglichst digital und schnell verfügbar) dazu empfehlen? Etwas mehr Kommentar und Code würde mir sicher weiter helfen.
-
Leitz schrieb:
Hallo Tachion, merci für Deine schnelle Antwort. Dieses kleine Programm ist der Versuch mir C++ mit einem etwas betagtem Skript beizubringen. ifstram und readline etc. werden hier gar nicht behandelt. Scheint mir aber auch einfacher zu sein. Kannst Du mir Literattur (möglichst digital und schnell verfügbar) dazu empfehlen? Etwas mehr Kommentar und Code würde mir sicher weiter helfen.
Eine gute Anlaufstelle zum Nachschlagen für die C++ Standardbibliothek ist diese Seite: C++ Reference. Das ist aber eher was, wenn man weiß wie etwas heißt, und dann nachschlagen will, wie es benutzt wird.
Für Tutorials würde ich an Deiner Stelle eine Suchmaschine bemühen und dann das für Dich am Besten geeignete Tutorial durchöckern.Kommentare:
#include <fstream> #include <string> //... //einen Stream zum Lesen aus in_file.txt oeffnen std::ifstream reader("in_file.txt"); //einen Stream zum Schreiben in out_file.txt oeffnen std::ofstream writer("out_file.txt"); //wir lesen in einen String ein. Um Arraygroessen muessen wir //uns nicht kuemmern std::string line; //solange raeder und writer okay sind (geoeffnet, noch zeilen in der Datei //etc.) lesen wir in "line" ein while(std::getline(reader, line) && writer) { //ggf. irgendwas mit line machen //und schreiben es dann wieder raus writer << line << '\n'; } //...
-
scheitere wohl grad an dem //ggf. irgendwas mit line machen
Wie schaffe ich es, dass das was zeilenweise in den string "line" eingelesen wird,
Stück für Stück an die richtige Position in mein Array geschrieben wird?
-
Such mal nach
std::stringstream...