Letzte Zeile beim Auslesen einer Datei mit getline()
-
Hallo.
Ich hätte noch eine kleine Frage zum Auslesen von Dateien. Warum liest mir folgende Funktion die letzte Zeile meiner txt-Datei 2-Mal aus?
Danke.
H.W.void cKlasse::MyFunction () { int count; double zahl; fstream datei; string zeile; stringstream str; cImagePkt dat; str << "PASS_PKT.txt"; datei.open(str.str().c_str(),ios::in); str.str(""); str.clear(); while (datei) { getline(datei,zeile); str.str(zeile); count=0; while (str >> zahl) { if (!count) dat.SetCoo(3,zahl); if (1 == count) dat.SetCoo(0,zahl); if (2 == count) dat.SetCoo(1,zahl); if (3 == count) dat.SetEnt(0,zahl); count++; } if (count) itsPass.push_back(dat); str.str(""); str.clear(); } datei.close(); }EDIT: Hier meine Text-Datei:
5 17.239 382.208 1
3 86.1654 214.348 1
7 153.12 208.417 1
1 175.852 605.536 1
-
Das Programm liest die Zeile nur einmal - aber im letzten Schleifendurchlauf läuft getline() auf's Dateiende und bricht mit dem Lesen ab - dabei wird das eofbit und failbit gesetzt und der übergebene String bleibt unverändert.
(das eofbit wird erst gesetzt, wenn du über das Dateiende hinauslesen willst)Zur Lösung kannst du dein Programm etwas umstellen:
while(getline(datei,zeile)) { str.str(zeile); ... }(getline() liefert freundlicherweise den gelesenen Stream zurück, dadurch geht das Programm gar nicht mehr in die Schleife rein, wenn das Lesen gescheitert ist)
-
Danke für die Hilfe! :xmas1:
-
Nur damit der Link nicht völlig in Vergessenheit gerät:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ

-
HumeSikkins schrieb:
Nur damit der Link nicht völlig in Vergessenheit gerät:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ

Wie wäre es die FAQ im FAQ-Forum zu verlinken oder einen entsprechenden Link in einem FAQ-Thema zu setzen, dass auch in o.g. FAQ beschrieben wird.
Greetz