std::getline, newline
-
Hey,
ich lese eine Datei folgendermaßen aus:
std::string buf; std::string line; while (std::getline(file, line)) { buf += line + "\n"; }Das klappt soweit auch super, aber ich habe am Ende immer ein Leerzeichen zu viel. Ich habe bereits versucht auf eof abzufragen, aber eof ist false.
Habe das Programm bisher nur unter Ubuntu getestet, da ich es dort auch programmiere.
Wie kann ich dem Problem entgegenwirken?
-
Das sollte bei deinem Code nicht passieren. Woher weißt du, dass ein Leerzeichen zu viel ist?
-
...... schrieb:
Wie kann ich dem Problem entgegenwirken?
Die Datei mit
ifstream::readeinlesen.
-
SeppJ schrieb:
Das sollte bei deinem Code nicht passieren. Woher weißt du, dass ein Leerzeichen zu viel ist?
Ich habe eine Testdatei erstellt, die zwei Zeilen enthält, z.B. so:
"Zeile 1
Zeile 2"Lasse ich mir das ausgeben mit std::cout << "'" << line << "'" << std::endl;
Dann erhalte ich
'Zeile 1'
'Zeile 2
'Eventuell hängt das mit der Implementierung im g++ zusammen? Vermutlich wird das EOF erst beim nächsten Aufruf erreicht oder so... Tatsächlich ist die Datei aber nach Zeile 2 sofort zu ende. Keine Ahnung...
-
oder der editor den du benutzt schreibt beim speichern noch eine leere zeile am ende. guck mal mit nem hexeditor oder so. textdateien sollten glaub ich immer am ende eine leerzeile haben, der g++ warnt auch wenn man sie bei c++ dateien vergisst.
-
std::endlführt einen Flush aus und führt auch zu einer neuen Zeile. Das letzte was du machst, ist einstd::endl. Daher hast du ganz am Ende auch eine neue Zeile.Und was asdfs geschrieben hat, ist blödsinn. Text-Files müssen am Ende nicht immer eine Leerzeile haben. Bei Cpp-Files muss das allerdings wirklich sein, kommt allerdings daher, dass es vom C++ Standard her vorgeschrieben ist. Wenn ich mich recht erinnere, hatte dies irgendwas mit dem Preprocessor zu tun. Gab mal hier einen Thread dazu.
Grüssli
-
Was der Grund dafür ist, ist letztlich völlig unerheblich, denn zumindest der C++ Standard definiert eine Quelltextdatei als eine Folge von durch \n abgeschlossenen Textzeilen.
Was natürlich nicht heisst, dass das für alle Textdateien gilt. (Gibt es einen ISO-Standard für Textdateien?)
-
ich hab nicht müssen geschrieben sondern sollten.