File einlesen - Sonderaktionen
-
Hallo!
ich habe folgendes Problem.
Und zwar lese ich ein File über den Konsolenparameter ein. Nun möchte ich in diesem File alle Kommentare und alle leere Zeilen löschen.Beispiel:
bla bla bla
%kommentar%kommentar
blubb blubb blubb
bli bli bliSollte zu folgendem String werden:
bla bla bla
blubb blubb blubb
bli bli bliMan kann auch alles zusammenpferchen, würde auch funktionieren also:
bla bla bla blubb blubb blubb bli bli bli
Ganz wichtig: Auch leer zeilen am Ende löschen.
Hoffe mir kann jemand helfen

lg
Killver
-
Hallo,
einfache Version ohne Fehlerprüfung
fstream in(argv[1]); string erg; if(in) { for(string ReadLine; getline(in, ReadLine);) { if(ReadLine.empty() == false && ReadLine[0] != '%') erg += ReadLine; } cout << erg << "Ergebnis:" << endl; in.close(); }Wobei die Leerzeilen wirkliche leerzeilen sein müssen und das Kommentarzeichen am Anfang stehen muss.
Gruß
Tobi
-
Die Kommentare können auch innerhalb von zeilen stehen.
also
blaaaaaaa %kommentar
Wie kamma des lösen?
-
Du musst den string parsen... mit find und substr von std::string sollte das kein Problem sein.
:schland:
-
Ich plage mich seitner Ewigkeit damit herum, kann mir da wer den Code schreiben, müsstjanet viel sein.
Danke abermal für die Antworten.
-
Ich bin mal so frei...
fstream in(argv[1]); string erg; int find = std::string::npos; if(in) { for(string ReadLine; getline(in, ReadLine);) { if(ReadLine.empty() == false) if((find = ReadLine.find('%')) != std::string::npos) erg += ReadLine.substr(0, find); else erg += ReadLine; } cout << erg << "Ergebnis:" << endl; in.close(); }find findet den Kommentar und substr schneidet bis zum Kommentar aus...
Gruß
Tobi:schland:
-
Also das mim Kommentare löschen funktioniert super. Leider funktioniert das leere Zeilen löschen net, die hat er immer noch!
-
Tja, die leeren Zeilen werden auch nur gelöscht, wenn sie wirklich leer sind. Dass heißt dass keine Leerzeichen vorhanden sind...
Gruß
Tobi:schland:
-
Es sind keine Leerzeichen enthalten.
Habs nun folgendermaßen erweitert:
if(ReadLine.empty() == false && ReadLine.find_first_not_of(" \t\v\r\n") != std::string::npos)Nun löscht er die Leerzeilen, nur wenn am Ende mehrere Leerzeilen sind, löscht er nur eine.
-
Also er löscht zwar nun die Leerzeilen zwischendurch im Text, aber nicht die Leerzeile am Ende.
-
Hab das Problem jetzt anderswärtig gelöst, indem ich einfach im späteren programmverlauf aufnen leeren string beinem curr_token abfrage.