Dateiarbeit - Wert aus letzter Dateizeile nutzen

Hallo Wissende,

ich habe folgendes Problem und bisher leider keine passende Idee.
In einer Datei stehen Datensätze in folgender Form:
01.01.2003;0;0;0
02.01.2003;440;33;7.5
03.01.2003;800;29;8.1

(Datum;km-Stand;Liter;Verbrauch)

Ich will nun den nächsten Datensatz mit dem aktuellen Verbrauch anhängen und muß dazu ja auf den letzten km-Stand (also die 800) zugreifen. Ich könnte jetzt vom Beginn an alle Datensätze einlesen usw. - wäre bei 1000ten Datensätzen doch aber irre.
Ich könnte nun mit seekg() ans Dateiende gehen - aber dann *grübel*?
Es könnte ja auch mal ein Verbrauch von 10.3 Liter oder getankt 9 Liter sein. Da hilft mir das Offset also auch nicht weiter. Gibt es ein rückwärts lesendes getline() ???
Mir fehlt einfach nur eine zündende Idee!

Danke, Thomas

Hallo Thomas,

ich habe folgendes Problem und bisher leider keine passende
Idee.
In einer Datei stehen Datensätze in folgender Form:
01.01.2003;0;0;0
02.01.2003;440;33;7.5
03.01.2003;800;29;8.1

(Datum;km-Stand;Liter;Verbrauch)

Ich will nun den nächsten Datensatz mit dem aktuellen
Verbrauch anhängen und muß dazu ja auf den letzten km-Stand
(also die 800) zugreifen. Ich könnte jetzt vom Beginn an alle
Datensätze einlesen usw. - wäre bei 1000ten Datensätzen doch
aber irre.
Ich könnte nun mit seekg() ans Dateiende gehen - aber dann
*grübel*?
Es könnte ja auch mal ein Verbrauch von 10.3 Liter oder
getankt 9 Liter sein. Da hilft mir das Offset also auch nicht
weiter. Gibt es ein rückwärts lesendes getline() ???
Mir fehlt einfach nur eine zündende Idee!

  1. Mit fseek() ans Ende der Datei und dann mit fseek() relativ immer ein Zeichen zurückgehen und einlesen. Das erste oder 2te gefundene Zeilenende ist dann der Anfang des letzten Eintrags. Ob es das 1te oder 2te ist hängt davon ab wie du die Einträge ausgiebst, also ob du „\n“ vor oder nach den Daten schreibst.

  2. mit fseek() an das Ende-100 Zeichen positionieren, dann letzten Eintrag finden. Dies setzt aber voraus, dass kein Eintrag länger als 100 Zeichen sein kann, bzw. die maximale Länge eines Eintrags bekannt ist.

  3. Der erste Eintrag enthält den letzten Stand und den Offset in der Datei. Dazu muss aber dieser erste Eintrag immer die gleiche grösse haben (muss halt mit leerzeichen aufgefüllt werden.) Zudem muss sichergestellt sein, dass die Datei nicht von Hand bearbeitet wird.

  4. Wie 3. aber die Werte werden in einer zusätzlichen Datei abgelegt.

MfG Peter(TOO)

Hallo Peter,

ich hatte es befürchtet aber innerlich gehofft, daß es sowas wie getline() nur rückwärts gibt (und mir bisher verborgen).
Also werde ich es doch wie in Deiner ersten Variante beschrieben machen müssen :frowning:

Vielen Dank,
Thomas