Pages: [1]   Go Down
Author Topic: Dateinamen generieren  (Read 450 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 2
Posts: 347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
ich brauche mal Hilfe, möchte eine SD-Karte zum aufzeichnen von Daten einsetzen.
Klappt alles bisher ganz gut, aber:
ich möchte anhand des Datums aus dem DS1307-Modul jeden Tag oder jeden Monat einen neuen
Dateinamen erstellen, z.B aus RTC.day, RTC.month, RTC.year den Dateinamen "04.03.2013.txt"
und diese Datei mit myFile = SD.open("04.03.2013.txt", FILE_WRITE); erstellen.
Das krieg ich aber nicht hin.
Gruß
Bernward
Logged

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2455
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

z.B aus RTC.day, RTC.month, RTC.year den Dateinamen "04.03.2013.txt"
und diese Datei mit myFile = SD.open("04.03.2013.txt", FILE_WRITE); erstellen.
Das krieg ich aber nicht hin.

Das ist nicht weiter verwunderlich, weil das FAT-Dateisystem nur 8.3 Dateinamen unterstützt, d.h.
- 8 Zeichen vor dem Punkt
- den Punkt
- drei Zeichen nach dem Punkt

Außerdem empfehle ich Dir dringend, die Dateinamen so aufzubauen, dass Du die Dateiliste mit einer alphabetischen Sortierung nach Datum sortiert bekommen kannst, so dass Du Deine Dateien selbst dann noch nach Datum sortieren kannst, wenn sie beispielsweise durch einen Kopiervorgang ihr originales Dateidatum verloren haben oder durch ein nachträgliches Editieren einen anderen Zeitstempel erhalten haben.

Schema: JJJJMMTT.txt

Also mehr solche Dateinamen wie
20130227.txt
20130228.txt
20130301.txt
20130302.txt
20130303.txt
etc.



Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
da hast du Recht, aber auch deinen Vorschlag bekomme ich nicht hin.
gruß
Logged

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2455
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

da hast du Recht, aber auch deinen Vorschlag bekomme ich nicht hin.

Oh, oh.

Dafür machst Du am besten eine Funktion, die den Dateinamen als C-String in einem Puffer erzeugt:
Code:
void CreateLogfileName(char* buffer, int y, int m, int d)
{
  sprintf(buffer,"%04d%02d%02d.txt",y,m,d);
}
So eine Funktion kannst Du dann später auch mal leicht in andere Projekte reinkopieren, falls Du da auch so etwas benötigst.

Und aufrufen kannst Du die Funktion dann z.B. von Deinem Programm aus mit so deklarierten Variablen, die dann als Parameter an die Funktion übergeben werden:
Code:
char filename[13];
int year=2013;
int month=3;
int day=5;
CreateLogfileName(filename,year,month,day);
Serial.println(filename);
Nach dem Funktionsaufruf steht der Dateiname in "filename" und kann natürlich auch zum Öffnen einer gleichnamigen Datei auf SD-Karte verwendet werden.

Gerade wenn Du einen Datenlogger schreibst, ist die Funktion "sprintf" zur Formatierung von Text vielleicht auch praktisch, wenn Du die Zeilen für Deine Logdatei formatieren möchtest. Die Funktion und was man damit machen kann (bzw. nicht machen kann, z.B. float Werte formatieren) würde ich mir daher ggf. mal näher ansehen.
Logged

Pages: [1]   Go Up
Jump to: