mikrocontroller.net

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


Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Wo finde ich den die Funktion Fseek()?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
../dir.c:171: undefined reference to `ReadSector'
dir.o: In function `ScanOneDirectorySector':

Kann es sein, dass die dir.h fehlt?

Gruß
Mark

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.