Go Down

Topic: Grundsatzfragen SD lesen und Werte zuordnen. (Read 3781 times) previous topic - next topic

combie

#30
Dec 31, 2017, 07:20 pm Last Edit: Dec 31, 2017, 07:23 pm by combie
Quote
Gibt es wirklich keine Möglichkeit, dass ich Zeilen im Sketch lösche?
Mit Sketch, meinst du hier deine Datendatei, oder?

Nein, du kannst die nur überschreiben.

Man kann nicht in der Mitte was raus schneiden

Du müsstest an dem Punkt wo du überschreiben willst den ganzen Rest der Datei hin kopieren.

Das schon möglich, aber auch aufwändig.

Hier sind alle Möglichkeiten aufgeführt: Arduino SD File

Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

MaHa76

OK, das hört sich nach ner Lösung an... aber nicht mehr dieses Jahr! Das mache ich nächstes Jahr :)

Serenifly

Was man machen kann ist jede Zeile auf eine konstante Breite zu formatieren. z.B. sowas:
Code: [Select]

0123;0012;0008

Dann ist es kein Problem die Werte einer Zeile mit anderen zur ersetzen

ElEspanol

#33
Dec 31, 2017, 08:15 pm Last Edit: Dec 31, 2017, 08:23 pm by ElEspanol
Das sind alles keine wirklichen Probleme.
Mein Ansatz, damit am PC editiert werden kann:
Von sd Zeile für Zeile lesen, somit anzahl der Zeilen feststellen, Leerzeilen und gelöschte ignorieren. Gelöst
Struct array mit der Zeilenanzahl anlegen mit Reserve für Neueinträge. Noch nicht gelöst.
Die csv Daten von der sd Karte zeilenweise einlesen, mit strtok in das struct schreiben. Lösbar ohne grossen Aufwand
Das struct array kann man dann bequemst im Sketch per index verwurschten.
Beim speichern über den struct iterieren und als csv Feld für Feld die Zeile zusammen basteln und in 2. Datei schreiben. Lösbar ohne grossen Aufwand
Originaldatei auf sd löschen
2. Datei umbenennen auf Name der Originaldatei.

Somit wird die Datei immer komplett eingelesen und auch wieder komplett geschrieben.

Edit: sehe gerade, das die sd lib kein umbenennen kann.
Dann eben löschen und die Datei neu schreiben. Und die 2. Datei (Backup) beim nächsten mal schreiben vorher löschen. So ist auf jeden Fall eine gute Version auf der Karte


Tommy56

Edit: sehe gerade, das die sd lib kein umbenennen kann.
SdFat kann es.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

combie

#35
Dec 31, 2017, 08:44 pm Last Edit: Dec 31, 2017, 09:13 pm by combie
Das sind alles keine wirklichen Probleme.
Mein Ansatz, damit am PC editiert werden kann:
Von sd Zeile für Zeile lesen, somit anzahl der Zeilen feststellen, Leerzeilen und gelöschte ignorieren. Gelöst
Struct array mit der Zeilenanzahl anlegen mit Reserve für Neueinträge. Noch nicht gelöst.
Die csv Daten von der sd Karte zeilenweise einlesen, mit strtok in das struct schreiben. Lösbar ohne grossen Aufwand
Das struct array kann man dann bequemst im Sketch per index verwurschten.
Beim speichern über den struct iterieren und als csv Feld für Feld die Zeile zusammen basteln und in 2. Datei schreiben. Lösbar ohne grossen Aufwand
Originaldatei auf sd löschen
2. Datei umbenennen auf Name der Originaldatei.

Somit wird die Datei immer komplett eingelesen und auch wieder komplett geschrieben.

Edit: sehe gerade, das die sd lib kein umbenennen kann.
Dann eben löschen und die Datei neu schreiben. Und die 2. Datei (Backup) beim nächsten mal schreiben vorher löschen. So ist auf jeden Fall eine gute Version auf der Karte


Wenn ich mir das alles so anschaue, dann weiß ich genau, warum ich dort eine feste Datensatzgröße wählen würde!

Dass es am PC dann etwas tragischer wird, wäre mir das Drama wert.


z.B. könnte man einen Kartenleser bauen, welche die Daten als CSV auf der Seriellen Konsole ausgibt, von da kann man sie nach Excel schaufeln, dort bearbeiten, als CSV speichern und wieder seriell auf den Kartenleser spielen.
z.b. Dieses könnte dabei hilfreich sein Bad Usb bei Ali (Leonardo kompatible)
Ich sehe gerade, es geht ja gar nicht um einen AVR!
Oder?
Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

Tommy56

Man kann auch im CSV mit aufgefüllten Daten eine feste Satzlänge realisieren.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

ElEspanol

Man kann in excel problemlos csv einlesen, verarbeiten und wieder speichern.
Feste Datensatzlänge ist eher verwirrend. Nur muss man natürlich eine max. Feldlänge einhalten. Oder beim Einlesen von sd in den uC zu lange Felder abschneiden.

Aber was ist nun mit dem Erzeugen von struct array zur Laufzeit? Sonst muss man halt doch ein grosses festes array machen, Speicher ist ja genug da.

combie

#38
Jan 01, 2018, 11:35 am Last Edit: Jan 01, 2018, 11:38 am by combie
Quote
Feste Datensatzlänge ist eher verwirrend.
Für dich vielleicht....
Aber für die kleinen µC ist es eine echte Erleichterung bei der Verarbeitung.

Eine flexible Datensatzgröße, unterbindet erstmal zuverlässig den Random Access Zugriff.
Man kann nur über die Menge der Einträge hinweg iterieren.
Muss sich jedes Zeichen/Byte anschauen.

Es sei denn, man legt eine Index Datei an.
Aber dann ist man wieder bei "zusätzlicher Verwaltung"

Quote
Aber was ist nun mit dem Erzeugen von struct array zur Laufzeit?
Kann man tun!
Aber Begeisterungstürme, darfst du nicht erwarten....

Ich sage mal, wenn es nicht anders geht, dann ok.
Aber sonst...

Quote
Sonst muss man halt doch ein grosses festes array machen, Speicher ist ja genug da.
Kann ich nicht beurteilen....
Bei mir herrscht meist Speichermangel.

Die (primitive) DB die ich weiter oben vorgestellt habe, braucht nur einen Record im Ram.
(wenn das ungetestete Ding denn dann wirklich funktioniert...)
Und es sind beim Lesen KEINERLEI Überprüfungen oder Wandlungen nötig.


Quote
Man kann auch im CSV mit aufgefüllten Daten eine feste Satzlänge realisieren.
Ja?
Ich kann mich nicht erinnern, dass Excel oder LibreOffice das anbieten.
Aber lasse mich gerne eines besseren belehren.
(habe die Dinger auch schon lange nicht mehr angefasst.)


Die Frage muss halt sein, ob der Verwaltungsaufwand, die Daten in ein Maschinenverarbeitbares Format zu quetschen, wirklich zur Laufzeit nötig ist. Und ob man es denn auch auf dem µC haben möchte.

Auf einem PC, kannst du so viele Dateien auf machen, bis dir schwindelig wird.
Auf den µC gibts meist nur 1 offene Datei. Zumindest bei der Arduino SD Lib ist das der Fall.

Schlussendlich:
Ich weiß nicht, was der bessere Weg ist.
Vielleicht gibts ja noch ganz andere Formate, welche ich jetzt gar nicht auf dem Schirm habe....


Ich werde die Sache aufmerksam beobachten, und mir deinen CSV Dateiverwalter mal anschauen, wenn er denn flitzt.
Die Methoden müssen dann, bei mir, allerdings auf einem AVR, oder anderem, gegeneinander antreten, denn ein  Teensy wartet hier nicht.
Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

MaHa76

Hm.... also, nur zur Info- ich lese weiter und hoffe auch mir pro und kontras für verschiedene Methoden aus der Diskussion heraus ziehen zu können...

vergeßt dabei aber bitte nicht, dass auch die grundsätzliche Umsetzung für mich erklärt werden sollte

ElEspanol

Für kleinere uC würde ich das anders angehen.
Aber ich sehe keinen großen „Verwaltungsaufwand", über das File zu iterieren, mit readStringUntil('\n') die Zeile zu nehmen und mit strtok in das struct array zu packen.

OT @Maha76: ist die 76 im Nich ein Hinweis aufs Geburtsjahr oder auf das tatsächliche Alter?  ;)

Tommy56

Quote
Man kann auch im CSV mit aufgefüllten Daten eine feste Satzlänge realisieren.

Ja?
Ich kann mich nicht erinnern, dass Excel oder LibreOffice das anbieten.
Aber lasse mich gerne eines besseren belehren.
(habe die Dinger auch schon lange nicht mehr angefasst.)
Ich auch nicht. Das war auch eher nicht auf Excel/Calc bezogen, sondern allgemein gesehen.

Man könnte auch eine Anwendung auf dem PC schreiben, die ein CSV  mit variabler Länge nimmt und eine mit fester Länge draus macht oder über eine Datenbank gehen und mit lpad/rpad die festen Längen erzeugen. Wege gibt es viele.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

MaHa76

#42
Jan 01, 2018, 12:14 pm Last Edit: Jan 01, 2018, 12:16 pm by MaHa76
Das ist mein Baujahr :)

Aber ich muss sagen, dass ich mit 9 Jahren angefangen haben mit Elektronik zu basteln- also einfache Dinge wie blinkende LEDs und kleine Aktivboxen mit nem A210K und Aussteuer-Anzeige mit nem A277... ich bin 30 Jahre lang analog unterwegs gewesen und komme erst so langsam aufs digitale :)

Und dann hab ich generell Schwierigkeiten mit Fremdsprachen, egal ob englisch oder C++/Arduino...

Und dann hab ich noch Hobbies wie Schreiner und am Oldtimer schrauben.

Da bleibt unterm Strich nur wenig Hirnmasse für solche Herausforderungen. Und ich glaube mein Sketch sagt schon deutlich genug, dass es mir nicht an Ideen mangelt und ich meine Stärke eher da habe logische Abläufe und Abhängigkeiten zu erdenken.

Das dann aber in Arduino zu übersetzen, bzw. die volle Bandbreite der Möglichkeiten zu erfassen ist dann für mich ne echt große Hürde.

Mit dem Nachtwächter habe ich millis() inzwischen so gut im Blut, dass ich jeden Pups damit mache und kein einziges delay() irgendwo einsetze...

so ein Anleitung für mein aktuell Problem wäre Gold wert :-)

Das man bei Erstellen von Einträgen am PC bestimmte Regeln zwingend einhalten muss, dass dann eben die txt- Datei mit klar definierter Struktur befüllt ist, sehe ich als sehr kleine Hürde an... also das Thema kann man ausblenden.

combie

Quote
Wege gibt es viele.
Jau!

1000 Wege führen nach Rom.
Aber alle nach Paris.


Quote
ich meine Stärke eher da habe logische Abläufe und Abhängigkeiten zu erdenken.
Interessant!

Da unterscheiden wir uns!
OK, "logische Abläufe", da bin ich bei dir.
Aber ich widme ein Großteil meiner Zeit, in der Programmierung, um gerade Abhängigkeiten zu erkennen und zu lösen.
"lose Koppelung" steht weit oben auf meiner Liste.

Z.B. das durchnummerieren....
Da ist mir spontan sowas aufgefallen:
>  Wecker1[11]
Das treibt mich zu der Annahme, dass es auch noch Wecker2 , 3 usw. gibt.

Dann würde ich alles daran setzen, dass das bei mir so aussieht:
> Wecker[1][11]


Quote
so ein Anleitung für mein aktuell Problem wäre Gold wert :-)
Das kann ich mir lebhaft vorstellen!
1000 Wege führen ...
Alle Wege ...

Aber mal schauen...
Der Prozess ist angestoßen, und ich bin gespannt wie es sich entwickelt.
Es ist offensichtlich, dass uns die Umstände alleine nicht glücklich oder unglücklich machen.
Es ist die Art unserer Reaktion darauf, die unsere Gefühle bestimmt.

ElEspanol

#44
Jan 01, 2018, 01:38 pm Last Edit: Jan 01, 2018, 01:38 pm by ElEspanol
// 07,23, 1,1,1,1,1,1,1, 1,1,1, Wecker1
// Stunde, Minute, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag, Feiertag, Brückentag, aktiviert, Wecker gesetzt

Wieso steht da "Wecker1" in dem SD-File und in der Definition ist das "Wecker gesetzt" ?

Go Up