boost::trim_left nicht auf leere Zeilen



  • Hallo zusammen,

    ich habe einen Code, der auf jede Zeile einer Datei angewendet wird, um Kommentare zu entfernen.

    Der entsprechende Code sieht wie folgt aus:

    while(!file.eof()){
    			getline(file, fileline);
    			if(!(boost::starts_with(fileline, "\n")))
    				boost::trim_left(fileline);
    			if(boost::starts_with(fileline, "//")){
    				//std::cout << "Comment seen and ignored" << std::endl;
    				parser->VParse::parse("\n");
    			} else {
    				boost::split(split, fileline, boost::is_any_of("//"));
    				if(split.size()>1){
    					boost::trim_right(split[0]);
    					parser->VParse::parse(split[0]+"\n");
    				} else
    					parser->VParse::parse(fileline);
    			}
    		}
    

    Nun ist es mir wichtig, dass die leeren Zeilen nicht getrimmt werden. Daher habe ich ja die

    if(!(boost::starts_with(fileline, "\n")))
    

    Anweisung. Aber das funktioniert nicht. Kann ich das irgendwie besser abfragen?
    Wenn eine Zeile zum Beispiel so aussieht : \t\t\n oder Ähnliches. Das sollte auch nicht getrimmt werden. Bzw. das \n soll in jedem Fall erhalten bleiben.

    Hat dazu jemand eine Idee?

    Besten Dank,
    JRS

    Danke.



  • Du liest ja schon Zeilenweise ein, da sind keine "\n" mehr in der Zeile zu finden. Dafür ist fileline leer, d.h. Du kannst mit fileline.empty() testen ob Du eine leere Zeile eingelesen hast.



  • Hi theta,

    ich wusste gar nicht, dass fileline keine "\n" mehr enthält. Das erklärt natürlich einiges.
    Herzlichen Dank!!



  • JRS schrieb:

    ich wusste gar nicht, dass fileline keine "\n" mehr enthält.

    getline liest alle Zeichen bis auf den Delimiter in den String, der Delimiter selbst wird einfach verworfen.


Anmelden zum Antworten