Filepointer setzen
-
Hallo zusammen
ich moechte meinen filepointer an den Begin der Zeile zuruecksetzen:
while(file) { getline(file, szBuffer); pos2 = szBuffer.length(); if(szBuffer.find("# ",0) != string::npos) { szBuffer.erase(0,pos2); } else if(szBuffer.find("exr ",0) != string::npos) { pos3 = file.tellg(); file.seekg(pos3,ios::cur); file >> szName >> iIsValid >> p[0] >> p[1] >> p[2]; } }Leider macht er das aber nicht so wie ich das gerne haette. Er laesst die Zeile in der er das "exr" findet immer weg beim einlesen nachher in meine Variablen. Wie bekomme ich den pointer wieder auf den Begin dieser Zeile in der er das "exr" findet?

Dankeschoen!
-
ios::beg
-
o.k., wenn ich ios::cur mit ios::beg ersetze funktionierts leider nicht, er liest dann gar nichts ein. Wo liegt dann der Fehler? Wie bekomme ich meinen Filepointer wieder an den Begin der Zeile?
-
Erst tell, dann getline, dann seek...
Was Du oben machst ist sinnlos: Fileposition holen und dieselbe Position (an der Du eh schon bist) setzen. Du brauchst die Position vor dem Lesen der Zeile, wenn Du vor die Zeile zurück willst.
-
samo schrieb:
Wie bekomme ich meinen Filepointer wieder an den Begin der Zeile?
Der erste Schritt dahin wäre, dass du dir die Position des Beginns der Zeile merkst.
Aber warum hampelst du überhaupt mit dem Filepointer herum? Warum schiebst du die eingelesene Zeile nicht einfach in einen Stringstream und liest daraus deine Variablen?
-
Ich bin noch ein ziemlicher Neuling in C++ und hab mit einem stringstream noch nie gearbeitet.
Wenn ich das tellg vor getline setze funktionierts leider auch nicht.
-
while(getline(file, szBuffer)) { if(szBuffer.find("# ",0) != string::npos) { szBuffer.erase(0,pos2); } else if(szBuffer.find("exr ",0) != string::npos) { stringstream ss(szBuffer); ss >> szName >> iIsValid >> p[0] >> p[1] >> p[2]; } }
-
Danke! Mit stringstream funktionierts!
