C++ Binärdateien bestimmte Zeile einlesen?

2 Antworten

Das wird eher nichts. Also wenn, dann musst du das vermutlich selber implementieren.

Zu implementieren ist das aber eher einfach. Du hast eine RegEx, die deinem Zeilen-Delimiter entspricht. Du liest in deinen Buffer etwas ein, immer ein Stückchen und schaust, ob dein Delimiter darin vorkommt.
Alles, bis zum Delimiter (oder jede Sequenz, die nicht dem Anfang deines Delimiters entsprechen könnte), kannst du vom Anfang des Buffers entfernen, sodass dieser nur eine feste Größe braucht.

Wie du das mit der RegEx genau realisiert, sei dir überlassen. Es böte sich aber an, sich quasi einen eigenen Regulären Automaten zu bauen, dem du jeweils ein Byte übergibst. Prinzipiell gäbe es zwar auch Scanner-Generatoren, aber das wäre vermutlich Overkill, wenn es dir wirklich nur um eine einzelne Sequenz geht.

Aber wenn du was vorgefertigtes möchtest, dann interpretier die Byte-Sequenz als Strring und nutze std::getline oder std::istream::ignore.

(Ich glaube std::istream::ignore macht sogar genau das, was du tun wolltest...)

Dazu müsstest du erstmal definieren, was denn in diesem Kontext eine Zeile ist.

Falls deine Definition "Eine Folge von Bytes, die durch eine bestimmte Bytesequenz abgeschlossen wird." lautet:

  1. Beginne bei Offset 0.
  2. Lies ein Byte in den Buffer ein.
  3. Überprüfe, ob der Buffer mit der Zeilenendesequenz endet.
  4. Falls ja erhöhe den Zeilenzähler um 1.
  5. Überprüfe falls der Zeilenzähler erhöht wurde, ob die gewünschte Zeile erreicht ist.
  6. Falls ja: Fertig.
  7. Ansonsten: Leere den Buffer und gehe zu 2.