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 bli

    Sollte zu folgendem String werden:

    bla bla bla
    blubb blubb blubb
    bli bli bli

    Man 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.


Anmelden zum Antworten