Textfile zeilenweise von SD-Karte lesen

OP #2247143
Lesenswert?

Moin,

folgendes Problem: ich möchte per SPI von einer SD-Karte ein Textfile 
zeilenweise einlesen und analysieren ( AVR_FAT32 )
Das alles soll auf einem Mega 128 oder 256 laufen.

Mein Plan:

- prüfen, ob Textfile vorhanden ist und File öffnen ( ffopen )
- erste Zeile lesen
- gelesen Daten analysieren
- tu was
- lies nächste Zeile ( loop )

Nun meine Fragen:

- wie komme ich an die ERSTE Zeile - mit ffseek(0x00) ??
- wie lese ich die GANZE Zeile ein - bis ich ein 0x13 (CR) lese ??
und was für mich noch sehr schleierhaft ist: wie sieht eine 
"vorbildliche"
zeilenweise Zeichenanalyse aus - da würde mir sicher ein anschauliches 
Beispiel sehr viel Kopfzerbrechen ersparen.

Schon mal vielen Dank für Antworten.
Hardy
Gast #2247155
Lesenswert?

>- wie komme ich an die ERSTE Zeile - mit ffseek(0x00) ??

Nein, wenn die Datei zum lesen geöffnet wird beginnt sie
automatisch bei 0.

>- wie lese ich die GANZE Zeile ein - bis ich ein 0x13 (CR) lese ??

Ja.
Gast #2247185
Lesenswert?

Textfiles gibt es aus Sicht eines Filesystems nicht - File ist File und 
basta. Du kannst also bloß blockweise lesen und mußt dir das Ganze dann 
selbst in Zeilen oder erstmal in einzelne Zeichen zerlegen.

W.S.
#2247206
Lesenswert?

Offenbar hat er eine FUnktion, die die Blöcke bereits in Einzelzeichen 
aufbricht und ihm Zeichen für Zeichen liefert.

> zeilenweise Zeichenanalyse aus - da würde mir sicher ein anschauliches
> Beispiel sehr viel Kopfzerbrechen ersparen.

:-)

Was dir noch viel mehr Kopfzerbrechen ersparen würde: Ein C-Buch und 
dort ganz speziell das Kapitel über Stringverabeitung.
#2247266
Lesenswert?

Hartmut O. schrieb:
> hab mir schon KR unters Kopfkissen gelegt  ;-) ... bloß einige Dinge
> leuchten mir erst richtig ein, wenn ich dazu ein passendes Beispiel
> gesehen habe. So auch Stringzerlegung und Analyse.

Das kommt ganz auf die Strings und ihren Inhalt selber an. Auch nicht 
uninteressant ist, ob es zb einen garantiert immer gleichen Stringaufbau 
gibt.

Je nachdem sind
strtok_r, strcmp, strncmp  deine Freunde.
OP #2247295
Lesenswert?

mehr oder weniger ist der Inhalt immer gleich. Geplant ist, in ferner 
Zukunft damit einen rudimentären G-Code-Interpreter zu basteln, welcher 
im Prinzip nur eine Hand voll Wege- und Maschinenbefehle kennen soll.
Zur Stringzerlegung gibt es ja schon eine Menge Threads ... man muß nur 
die richtigen Begriffe in die Suche eingeben - aber manchmal scheitert 
es schon daran :-0
Das mit dem "Block-Lesen" muß ich erst mal auseinanderdividieren. Ich 
gehe mal nun einfach davon aus, dass ein Block nicht unbedingt eine 
Zeile ist, sondern kompakt die Daten aus dem File liegen, welche nur mit 
einem 0x13 getrennt werden, stimmts?
#2247299
Lesenswert?

Hartmut O. schrieb:
> mehr oder weniger ist der Inhalt immer gleich. Geplant ist, in ferner
> Zukunft damit einen rudimentären G-Code-Interpreter zu basteln, welcher
> im Prinzip nur eine Hand voll Wege- und Maschinenbefehle kennen soll.
> Zur Stringzerlegung gibt es ja schon eine Menge Threads ... man muß nur
> die richtigen Begriffe in die Suche eingeben - aber manchmal scheitert
> es schon daran :-0
> Das mit dem "Block-Lesen" muß ich erst mal auseinanderdividieren. Ich
> gehe mal nun einfach davon aus, dass ein Block nicht unbedingt eine
> Zeile ist, sondern kompakt die Daten aus dem File liegen, welche nur mit
> einem 0x13 getrennt werden, stimmts?

So ist das.
Wenn du so willst: eine Buchseite. Ohen Rücksicht auf Satzende oder 
Zeilenumbrüche. Einfach die nächsten 256 (oder 128 oder ... was dir 
deine SD-Lib anbietet) Zeichen vom File. Was immer die auch sind.
Gast #2247304
Lesenswert?

Hartmut O. schrieb:
> - wie lese ich die GANZE Zeile ein - bis ich ein 0x13 (CR) lese ??

Argh. Ich versuche jetzt seit 30 Minuten ordentlichen Pseudocode zu 
schreiben und kriegs nicht hin. :-(

Versuchen wir es mit Wörtern: Du liest erstmal einen großen "Batzen" der 
Datei in den RAM, einzelnde Bytes aus der Datei lesen dürfte länger 
dauern sofern es überhaupt eine Funktion gibt. Dann fängst du vorne an 
und suchst den ersten Zeilenumbruch. Anschließend kopierst du die 
gefundene Zeile eventuell woanders hin und verarbeitest sie und suchst 
dann die nächste Zeile wobei du ein Zeichen weiter anfängst um das eben 
gefundene '\n' zu überspringen. Wenn eine Zeile über 2 oder mehr Blöcke 
verteilt ist wirds etwas schwieriger, dann musst du den ersten Teil 
sichern bevor der Block überschrieben wird. Eigentlich nur ein paar 
Schleifen und etwas Pointergewusel.

Hm, ist auch nicht besser, aber ich schicks jetzt ab. Pff...

> und was für mich noch sehr schleierhaft ist: wie sieht eine
> "vorbildliche"
> zeilenweise Zeichenanalyse aus
Was willst du da "analysieren"?
OP #2249607
Lesenswert?

murkscoder schrieb:
> Was willst du da "analysieren"?

vorweg vielen Dank für deine Pseudo-Code-Bemühungen!

Na ja, wie ich schon angedeutet habe will ich sogenannten G-Code 
interpretieren und danach verarbeiten. Dazu müssen alle Zeichen 
nacheinander untersucht, auf plausibilität geprüft und dann 
dementsprechend abgearbeitet werden.
Aber langsam geht mir ein Licht auf und habe eine vage Vorstellung von 
dem, wie ich das anstellen will :-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren