Forum: Mikrocontroller und Digitale Elektronik SD-Card: Letzte Zeile einer Textdatei auslesen


von Mark (Gast)


Lesenswert?

Hallo,

ich bastel gerade an einem Datenlogger rum. Dieser speichert die 
gesammelten Daten auf einer SD-Karte in einer Textdatei. Jeder 
Datensatzt wird in einen Zeile geschrieben.

Ich benutze die LIB von Holger Klabunde.

Nun würde ich gerne beim wiedereinschalten des Datenloggers die letzte 
Zeile einlesen und mit diesen Werten weiterarbeiten. Das es sich aber um 
mehrer Hundtertausend Zeilen handel, kann dauert es sehr lange, die 
Datei komplett zu lesen.

Ich möchte letzten Daten auch nicht im µC speicher, da verschiedenen 
SD-Karten zum einsatzt kommen und immer mit den jeweileigen Daten 
gearbeitet werden soll.

Gibt es einen Möglichkeit direkt zur letzten Zeile der Datei zu 
springen?

Danke für eure Hilfe!

Gruß
Mark

von holger (Gast)


Lesenswert?

>Gibt es einen Möglichkeit direkt zur letzten Zeile der Datei zu
>springen?

Du könntest es mit Fseek() versuchen. Beispiel:

     Fseek(-128,SEEK_END); // Gehe zu Dateiende - 128 Bytes

Dann wird nicht jeder Sektor bis zum Dateiende gelesen.

von Mark (Gast)


Lesenswert?

OK. Wo finde ich den die Funktion Fseek()?

von holger (Gast)


Lesenswert?

>OK. Wo finde ich den die Funktion Fseek()?

Wie alt ist deine Version der LIB? Fseek() ist schon
seit 2007 drin. Gab Anfang dieses Jahres noch einen Bugfix
zu Fseek(). Also zieh dir mal ne neue Version.

von Mark (Gast)


Lesenswert?

OK... wo ist eigentlich U8 usw. und so definiert? Ich verwende immer 
uint8_t uws.

von Karl H. (kbuchegg)


Lesenswert?

U8 ist nicht offiziell.

Das hat sich wohl jemand in einen privaten Header reingemacht, als die 
offiziellen unabhängigen Datentypen noch selten benutzt wurden bzw. 
überhaupt verfügbar waren.

von Mark (Gast)


Lesenswert?

Lang ist's her ...

holger schrieb:
> Wie alt ist deine Version der LIB? Fseek() ist schon
> seit 2007 drin. Gab Anfang dieses Jahres noch einen Bugfix
> zu Fseek(). Also zieh dir mal ne neue Version.


Ich hab mir die neue Version gezogen.

Nun bekomme ich die Meldung:
1
../dir.c:171: undefined reference to `ReadSector'
2
dir.o: In function `ScanOneDirectorySector':

Kann es sein, dass die dir.h fehlt?

Gruß
Mark

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Mark schrieb:
> Kann es sein, dass die dir.h fehlt?

Nö, denn das ist wohl eher eine Meldung des Linkers. Dem interessiert 
keine .c oder .h Datei etwas. Mir scheint eher, dass eine Objektdatei 
fehlt, oder dass zumindest die Funktion "ReadSector" nicht gefunden 
wird.

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.