C++ Zeichensprünge mit seekg in CSV

Gast #5452706
Lesenswert?

Hey Leute,

ich schreibe gerade etwas um in einer CSV Datei einen Zeitstempel 
schneller zu finden und ab dort auszulesen. Statt mehrere GB Dateien nur 
per std::getline zu iterieren um an den Punkt zu kommen will ich per 
file.seekg() große Sprünge machen um mich schneller dem Ziel zu nähern. 
Bei std::getline wird immer eine Zeile weitergesprungen aber bei seekg 
eine bestimmte anzahl an Zeichen, sodass ich erst den Beginn einer Zeile 
finden muss um dann wieder eine Zeile auszulesen.
1
// springe großen Abstand nach vorne:
2
file.seekg(Zeichensprungwert,std::ios_base::cur)
3

4
// springe solange ein Zeichen weiter bis man wieder am Anfang einer Zeile ist:
5
char ch;
6
while(ch != '\n')
7
{
8
   file.get(ch); // Springt ein Zeichen vor
9
}
10
file.get(ch);
11

12
// Ab hier soll std::getline wieder normal auslesbar sein.

Das Problem ist, dass es nicht funktioniert, es bleibt irgendwie in der 
while-Schleife stecken. Hat jemand eine Idee woran das liegt?

Grüße
#5452731
Lesenswert?

EOF wird in der Schleife nicht behandelt, und ich sehe nicht ob das eine 
Exception werfen kann.

Es könnte theoretisch CSV Dateien geben die nur '\r' als Zeilenende 
enthalten.

Ich hätte allerdings einfach ein dummy std::getline() eingefügt. Das 
liefert Dir den Rest der Zeile.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren