Textdatei zeilenweise auslesen und in neue schreiben
-
hi Folks!!!
ich muss in c++ ein programm schreiben das die zeilen in einer textdatei ausliest und zwar nach folgendem schema:
11111111;222222222;3333333;4444444;.........
also in jeder zeile steht halt irgendwas und es kommt immer mal wieder ein ;
das programm soll jetzt nach jedem 5. ; eine neue zeile beginnen und das in die neue datei schreibenalso so das in der neuen datei immer nur 5 ; drinne stehen und in der 2ten wieder usw...
wäre für hilfe sehr dankbar
flip125@gmx.de
-
Folgendes Programm liest allerdings zeichenweise ein.
Sonst müsstest du die eingelesene Zeile in einen string lesen und diesen dann nach dem 5. ";" zerlegen.#include <iostream.h> int main() { char buff; int count=0; FILE *falt=fopen("Alte.txt","r"),*fneu=fopen("Neue.txt","w");; while(!feof(falt)) { buff=fgetc(falt); if(buff!='\n'&&!feof(falt))fputc(buff,fneu); if(buff==';') count++; if(count==5) { fputc('\n',fneu); count=0; } } fclose(falt); fclose(fneu); return 0; }
-
Hallo!
@_Stefan:
Dein Code ist zwar korrekt, bildet aber leider nur eine Lösung in Standard C ab.Die Lösung in Standard C++ (ist hier in dieser Rubrik doch gewünscht, oder? ;)) lautet:
#include <iostream> // 1 #include <fstream> // 2 #include <string> // 3 using namespace std; int main() { fstream in_file("original.txt", ios::in); // 4 fstream out_file("kopie.txt", ios::out | ios::trunc); // 5 string buffer; while(!in_file.eof()) // 6 { getline(in_file, buffer, ' '); // 7 out_file << buffer << endl; // 8 } return 0; } /* 1 - Inkludiert für "endl", kann auch rausgeschmissen werden, wenn "endl" durch "\n" ersetzt wird. 2 - Stellt uns die nötigen Klassen zur Dateibehandlung zur Verfügung. 3 - Inkludiert für die Funktion getline() zum Zeilenweisen lesen 4 - Erstellt Objekt "in_file" der Klasse "fstream". 1. Parameter ist der Dateiname (evtl. inklusive Pfadangabe), 2. Parameter gibt die Optionen an, in diesem Fall "Einlesen". 5 - Erstellt Objekt "out_file" der Klasse "fstream". 1. Parameter ist der Dateiname (evtl. inklusive Pfadangabe), 2. Parameter gibt die Optionen an, in diesem Fall "Ausgabe" und "Neu Schreiben". 6 - Solange ausführen wie die Methode "eof()" des Objektes "in_file" NICHT true zurückgibt. (eof = End of File) 7 - Zeile aus "in_file" in unseren "buffer" schreiben. Der dritte Parameter ist Compiler abhängig. Der Visual C++ 6.0 - Compiler verlangt in (weswegen auch immer), der Borland C++ 5.5 - Compiler kann auf ihn verzichten. Einfach mal probieren. 8 - Zeile im Buffer in die Ausgabedatei "out_file" schreiben. Dahinter muss noch ein ein Zeilenumbruch (falls gewünscht) angegeben werden. */
Hoffe ich konnte helfen...
-
Mein Code ist zwar in C.
Dafür erfüllt er aber seine Aufgabe.
Dein Code würde eine 1:1 Kopie der Ursprungsdatei erstellen.
-
Stimmt, mir ging es auch nur um Datei Ein- und Ausgabe.
Sorry, wenn ich mich falsch ausgedrückt hab'.
-
Jetzt aber die wirkliche Lösung zu der Aufgabe(, wenn ich sie diesmal richtig verstanden hab...):
#include <iostream> #include <fstream> using namespace std; int main() { fstream in_file("original.txt", ios::in); fstream out_file("kopie.txt", ios::out | ios::trunc); char buffer; int count = 0; while(in_file >> buffer) { if(!in_file.eof()) { if(buffer == ';') count++; out_file << buffer; if(count == 5) { out_file << endl; count = 0; } } } return 0; }
Geht wahrscheinlich auch noch einfacher...
-
#include <fstream> using namespace std; int main() { ifstream in("original.txt"); ofstream out("kopie.txt"); unsigned count = 0; char ch; while (in.get(ch)) { if (ch == ';') ++count; out.put(ch); if (count == 5) { out.put('\n'); count = 0; } } }
sollte kürzer und korrekter sein (wie immer ohne gewehr)