Forum: PC-Programmierung C++ Zeichensprünge mit seekg in CSV


von CSV-Coder (Gast)


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

von Jim M. (turboj)


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.

von MaWin (Gast)


Lesenswert?

CSV-Coder schrieb:
> char ch;
> while(ch

CSV-Coder schrieb:
> Das Problem ist, dass es nicht funktioniert

Wie soll es auch, das uninitialisierte ch wird in while schon abgeprüft.

von CSV-Coder (Gast)


Lesenswert?

Danke für die Antworten, das mit dem dummy std::getline ist eine super 
idee dann kann ich mir den Schleifenkram ersparen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.