Effectivement, changer une ligne en C, consiste à réécrire tout le fichier, avec la ligne modifiée, ou, sans cette ligne si on veut la supprimer.
Sur le serveur, il n'y aura aucun problème à identifier les données, puisqu'elles restent dans le même ordre pour chaque ligne. Ca sous entend évidement, que si une valeur d'une ligne devait être omise, il doit quand même apparaître une valeur vide dans le CSV, soit 2 virgules qui se suivent. Si non, il y aura un décalage lors de la lecture.
Etant donné la nature des données stockées dans ton CSV, le XML ne t'apporterait rien à par des cheveux blancs en créant les fonction sur l'Arduino.
Faire un petit script sur le serveur (coté PC) qui te le passe en XML te posera nettement moins de soucis.
+1 pour l'avis général, le format CSV est bien mieux.
Surtout que même côté serveur le format CSV est plus simple à gérer que du XML.
Pour parser du CSV il faut faire un découpage de chaine de caractère ligne par ligne, c'est 3x rien à coder.
Pour parser du XML il faut prendre en compte l'architecture du fichier, l'encodage, ...
Pour ce qui est du renvoi des données "offline" c'est pas compliqué, comme elles sont toute dans un ordre chronologique il te suffit d'envoyer toutes les données du fichiers en une seule fois.
Le problème c'est que tu ne peut pas enlever une ligne bien précise dans un fichier sans tout lire / réécrire.
Donc si l'envoi du fichier complet échoue tu auras des problèmes pour gérer la situation.
Le mieux serait de faire un dossier avec un fichier par trame à émettre, numéro dans un ordre croissant, une sorte de file d'attente d'envoi avec des fichiers.
Tu envois fichier par fichier dans l'ordre, si ça marche tu supprime le fichier, si ça plante tu laisse le fichier en place pour la prochaine fois.
en fat 16:
65 524 fichier sur la partition, et apparement 512 fichier à la racine (en ne dépassant pas le nomage en 8.3) par contre, je ne sais pas de ce qu'il en est dans un autre dossier...
Je ne sais pas s'il est possible de lire la fat32 (qui est bien moins limitative) avec la librairie sd
C'est bien 512 fichiers ou répertoires pour le répertoire racine car la FAT pour le répertoire racine est de taille fixe
Cette limite saute pour les sous répertoires qui peuvent être étendus dynamiquement sur plusieurs clusters
... en théorie
Car effectivement il faudrait vérifier que l'implémentation Arduino permette de gérer le cas général.
A la place de l'auteur, je ne me serais pas embarrassé d'une implémentation complète pour un micro 8 bit.
j'essaie déjà de former le nom du fichier me permettant de créer le fichier sur la carte SD.
voila une partie du code mais cela ne créé pas le fichier avec le nom espéré ... lol
la nuit porte conseil comme ondit
Merci à tous
voici le code qui fonctionne en fonction de ce que vous m'avez dit
Je vais taguer le poste comme résolu !
// Mise en forme du nom du fichier .txt
char datafile[13];
int jour=day();
int mois = month();
int heure= hour();
int minut= minute();
sprintf(datafile,"%02d%02d%02d%02d.txt",mois,jour,heure,minut); // %d pour un int
//----- initialisation de la carte SD -----
Serial.println( (__FlashStringHelper *)PSTR("Initialisation de la SD card..."));
SD.begin(brocheSDCardSelect); // initialisation de la carte SD avec broche 4 en tant que CS - renvoie true/false
Serial.println(datafile);
//---- crée fichier en écriture ---
file = SD.open(datafile, FILE_WRITE); // ouvre le fichier en écriture
barbudor:
Je crois que je suis le fautif
Je connaissais PSTR et _FlashStringHelper mais pas F() que j'ai trouvé récemment
J'ai donc orienté PITP2 la dessus....