Arduino SD csv kopieren

Ich stelle mir folgendes vor:
Temperaturdaten werden in eine csv-Tabelle geschrieben. diese Daten-Tabelle soll einen fünf-zeiligen Tabellenkopf bekommen.
Dieser Tabellenkopf soll als Ausgangsdatei auf der SD liegen. Beim Erzeugen einer neuen Daten-Tabelle möchte ich diese Ausgangsdatei kopieren und mit neuem Namen versehen, um dann ans Ende die Temperaturdaten zu schreiben.
Ist es möglich eine Datei zu kopieren? möglichst mit SD-Library.
Über Tipps würde ich mich freuen.
Gruß Gerd

Die Frage ist, wie der Arduino damit klar kommt. Vorab, ich hab keinerlei Ahnung von der SD Lib. Vermeide diese gänzlich.

Es dürfte doch einfacher sein, im setup() den Tabellenkopf einmal zusetzen. Am besten lässt du, sofern eine RTC verbaut, jeden Tag eine solche Liste mit eigenen Namen (YYMMDD_data.csv) anlegen.

Ich fürchte, es sollten keine 2 Dateien gleichzeitig offen sein.
Anstelle die ganzen 5 Zeilen Text erst in den RAM zu laden um sie danach in eine neue Datei zu schreiben, wäre es wohl besser, diesen Text im Flash ( PROGMEM ) zu halten und beim Erzeugen der neuen Datei von dort zu holen.

Übrigens:
"YYMMDD_data.csv" ist etwas lang. (Bei Dateinamen sind nur 8.3 Buchstaben erlaubt)

Meine Dateinamen sehen so aus: YYMMTTxx.csv, wobei xx eine laufende Nr. ist, um vorhandene Daten nicht zu zerstören. Datum und Zeit hole ich von 'nem Zeitserver übers Internet.
Gruß Gerd

Hallo,
sschultewolter, wie machst Du das? "SD Lib. Vermeide diese gänzlich"
Hast Du da mal ein Beispiel?

gerd-wolfgang, "fünf-zeiligen Tabellenkopf"
Du meinst das richtig? fünf Zeilen nicht Spalten?
"Tabellenkopf soll als Ausgangsdatei"
d.h. die Datei ist vor dem loggen schon vorhanden, oder wird vom
Programm erst erzeugt?

mache es doch über einen Zähler, so in der Art:
ist zähler = 0
Schreibe ProgrammKopf
Zähler = 1
ist Zähler = 1
schreibe daten

Gruß und Spaß dabei
Andreas

Hallo SkobyMobil,
ja, ich meine 5 Zeilen: Sensor-ID, Klarname, Sensortyp, Auflösung, Sollwert. Dann kommen die eigentlichen Messwerte, angeführt mit aktueller Zeit. Wenn das mit dem "Datei kopieren" funktioniert sind die fünf Zeilen kein Problem. So sehen ich es zumindest zur Zeit.
Gruß Gerd

Normalerweise macht es mehr Sinn, sowas in eine Spalte zu schreiben.
Die Werte werden dann in die darunterliegenden Zeilen geschrieben.

@Skobi, ich verwende keine SD Karten beim Arduino :smiley:

Schöner ist es schon, wenn der Dateikopf von einer Vorlage auf der SD gelesen werden kann, statt im Sketch fest programmiert zu sein.

Aus der libraries\SD\ReadMe.txt

(C) Copyright 2010 SparkFun Electronics
Now better than ever with optimization, multiple file support, directory handling, etc - ladyada!

Zumindest auf dem MEGA 2560 sollte also Dateien kopieren gehen, sonst musst du sehen, ob der RAM reicht.

gibt es denn eine Dokumentation für die sdFat-Library. Ich konnte bisher aus den Beispielen keine positiven Erkenntnisse ziehen. Und andere Infos sind mir nicht bekannt
Gruß Gerd

Hallo,
es gibt ja eine "SD-Info"
Die holt Dir ja schon alle Info´s hoch. Also, Deine Datei heißt "Vorlage" mit
5 Datendaätzen.

Temp1
Temp2
Temp3
Temp4
Temp5

Dieses "Vorlage" kannst Du ja einlesen. Jetzt hast Du eine Variable oder
String mit "Vorlage". An diesen hängst Du einfach einen Index Deiner Wahl
an (a,b,c,1,2,3)
Jetzt hast Du eine Variable oder String mit "Vorlage-a,b,1,2"
Damit ist es ja ganz einfach möglich (siehe SD-read/write) eine neue Datei
anzulegen.
Jetzt hast Du eine Datei "Vorlage-1"
Nun liest Du die ersten 5 Datensätze Deiner original Volage ein, und schreibst
sie einfach in Vorlage-1.
Also, ich bin der Meinung das funktioniert ohne Probleme. Wie? Habe ich noch
keine Ahnung. Ich bin schon froh, das ich den (festen) Datenkopf nur einmal
in meine Log-Datei schreiben kann.
Sich das aber aus einer Vorlage zu holen, ist eine gute Idee. Schaue Dir
mal die SD-Beispiele an, da kann man schon eine Menge mit machen.
Gruß und Spaß
Andreas

Schau doch mal
https://code.google.com/p/sdfatlib/downloads/list

gerd-wolfgang:
gibt es denn eine Dokumentation für die sdFat-Library. Ich konnte bisher aus den Beispielen keine positiven Erkenntnisse ziehen. Und andere Infos sind mir nicht bekannt
Gruß Gerd

Du musst die Arduino SD Lib und sdFat unterscheiden

Die Arduino SD Lib ist eine Wrapper Klasse für eine alte Version von sdFat. Entsprechend sind einige Bugs drin und die Funktionalität ist sehr eingeschränkt.

Für die eigentliche sdFat Lib ist eine html Doku im Download dabei in der alle Klassen dokumentiert sind. Aber das ist NICHT auf die SD Lib übertragbar.

Dateien wirklich zu kopieren geht aber auch mit sdFat nicht was ich so sehe. Hatte auch schon mal danach gesucht. Höchstens zeilenweise auslesen und in eine andere Datei schreiben.

Höchstens zeilenweise auslesen und in eine andere Datei schreiben.

Du meinst sicher byteweise :wink:

while ( (c = FileFrom.read()) != EOF) FileTo.write(c);

Oder:Einzig sinnvolle Alternative wäre sektorweise, an der Lib vorbei.

Hallo,
was machst Du denn da? Das sieht nicht blöd aus.
Du liest FileA bis zum Ende, und schreibst es dann in FileB?
Öffnet es erst das FileA, liest es, schließt es, öffnet FileB u.s.w?
Gruß und Spaß
Andreas

Nein, beide Dateien müssen offen sein: FileFrom zum Lesen, FileTo zum Schreiben.
In der while() Zeile wird jedes Zeichen von From nach To geschrieben.

Danach FileTo.close() nicht vergessen !

(Intern sorgt die sdFat Library dafür, dass ganze Sektoren auf die Karte geschrieben werden.)