Forum: Mikrocontroller und Digitale Elektronik Textfile zeilenweise von SD-Karte lesen


von Hartmut O. (hardy63)


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

von holger (Gast)


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.

von W.S. (Gast)


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.

von Karl H. (kbuchegg)


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.

von Hartmut O. (hardy63)


Lesenswert?

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.

von Karl H. (kbuchegg)


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.

von Hartmut O. (hardy63)


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?

von Karl H. (kbuchegg)


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.

von murkscoder (Gast)


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"?

von Hartmut O. (hardy63)


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 :-)

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.