Dateizeiger genau eine Zeile zurücksetzen
-
Hallo,
ich habe ein Problem beim auslesen einer Datei.
Und zwar lese ich diese Datei immer zeilenweise aus mit getline() und möchte in bestimmten Fällen genau eine Zeile zurückspringen, damit ich dann sozusagen die gleiche Zeile nochmal auslesen kann.
Gibt es da eine Funktion für, so etwas wie ungetline() oder so??
Wäre echt cool wenn ihr mir helfen könntet.
Gruß Lehan
-
Nein sowas gibt es direkt nicht. Aber ich denke du könntest dir einfach immer die Position merken bevor du getline() machst, dann kannst du bei bedarf zu dieser position zurück springen.
-
mhm, schade es könnte so einfach sein

aber trotzdem danke für die schnelle Antwort
Dann weiss ich wenigstens das ich nicht weiter suchen brauche

-
Lehan270 schrieb:
Und zwar lese ich diese Datei immer zeilenweise aus mit getline() und möchte in bestimmten Fällen genau eine Zeile zurückspringen, damit ich dann sozusagen die gleiche Zeile nochmal auslesen kann.
Wie umständlich. Warum machst du dir nicht einfach nach dem Auslesen eine Kopie von deinem Puffer/String, in den du die Zeile eingelesen hast?
-
Schreibs dir halt selbst.
template<typename CharT> std::basic_istream<CharT>& unget_line(std::basic_istream<CharT>& in, CharT lineEnding = CharT('\n')) { while(in.tellg() != 0 && in.seekg(-1, std::ios_base::cur) && in.peek() != lineEnding); }Ungetestet, kann sein dass es so nicht klappt weil getline ja das Zeilenende frisst und das dann möglicherweise wieder gleich wieder im Stream ist ... aber Idee sollte klar sein.
Klappt natürlich nicht bei jedem Stream. (Zb Netzwerk-Streams)
-
unter unix gibt es :
http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
und
http://linux.about.com/library/cmd/blcmdl2_pread.htm
-
Tuxist schrieb:
unter unix gibt es :
http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
und
http://linux.about.com/library/cmd/blcmdl2_pread.htmIch sehe keinen Mehrwert verglichen mit der Funktionalität der IO-Streams.
-
Kommt auf die Datei an und die Größe an, bei großen Binar Dateien ist pread und lseek deutlich flotter unterwegs. Dafür sind die IO-Streams einfacher zu händeln.
-
Lehan270 schrieb:
ich habe ein Problem beim auslesen einer Datei.
Und zwar lese ich diese Datei immer zeilenweise aus mit getline() und möchte in bestimmten Fällen genau eine Zeile zurückspringen, damit ich dann sozusagen die gleiche Zeile nochmal auslesen kann.
Hallo Lehan,
Willkommen im C++-Forum.
Die Beschreibung oben scheint mir ein Klassiker des XY-Problems zu sein.
Du hast das Problem X 'Daten aus Datei lesen'. Dir schwebt bereits eine Lösung vor (getline & zurück an Zeilenanfang ==Y), wobei Du über ein Detailproblem fällst.Besser: Erzähle uns, wie Deine Datei ausschaut (vielleicht einige Beispielzeilen) und sage dazu, was Du in welche Datensätze einlesen möchtest.
Gruß
Werner