Hallo,
gestern hab ich mehrere Stunden mit Fehlersuchen verbracht um dann festzustellen, dass std::getline() den String immer mit dem Zeilenumbruch \r\n liefert. Per std::cout schwer zu finden da unsichtbar. Der Fehler ist bei der Prüfung zweier Strings auf Gleichheit aufgetereten.
Mit der Zeile zeile.erase(zeile.find_last_not_of("\r\n")+1); funktioniert jetzt alles:
Vorher habe ich eher Zahlen ausgelesen per std:stof etc dort ist mir nie ein Fehler aufgetreten, kann std:stof und Konsorten mit Zeilenumbrüchen umgehen? Ich überlege, ob ich jetzt generell bei std::getline() lieber immer die oben gezeigte Zeile anwende.
Frage 1: kann man std::getline() dazu bringen den Zeilenumbruch erst gar nicht in den String zu stecken?
Wenn nein:
Frage 2: Sollte man generell bei der Verarbeitung von Zeilen von std::getline() die \r\n löschen? Oder ist das nur beim Usecase Stringvergleich notwendig?
Frage 3: Es gibt \n oder \r oder \r\n. Bei mir funktioniert die obige Löschaktion nur wenn dort "\r\n" oder "\r" eingetragen ist. Um alles abzudecken zB Datenquellen von Unix Mac und Windows müsste man dann eigentlich alle Varianten abfragen richtig?. Wird ja auch alles nicht performanter mit den ganzen Zusatzprüfungen.
Grüße
gestern hab ich mehrere Stunden mit Fehlersuchen verbracht um dann festzustellen, dass std::getline() den String immer mit dem Zeilenumbruch \r\n liefert. Per std::cout schwer zu finden da unsichtbar. Der Fehler ist bei der Prüfung zweier Strings auf Gleichheit aufgetereten.
Mit der Zeile zeile.erase(zeile.find_last_not_of("\r\n")+1); funktioniert jetzt alles:
C++:
std::string zeile;
while(std::getline(file,zeile))
{
zeile.erase(zeile.find_last_not_of("\r\n")+1);
// usw
}
Frage 1: kann man std::getline() dazu bringen den Zeilenumbruch erst gar nicht in den String zu stecken?
Wenn nein:
Frage 2: Sollte man generell bei der Verarbeitung von Zeilen von std::getline() die \r\n löschen? Oder ist das nur beim Usecase Stringvergleich notwendig?
Frage 3: Es gibt \n oder \r oder \r\n. Bei mir funktioniert die obige Löschaktion nur wenn dort "\r\n" oder "\r" eingetragen ist. Um alles abzudecken zB Datenquellen von Unix Mac und Windows müsste man dann eigentlich alle Varianten abfragen richtig?. Wird ja auch alles nicht performanter mit den ganzen Zusatzprüfungen.
Grüße