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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.