Go Down

Topic: Carte SD - programmation [mettre en tableau key et val liées] - config.txt (Read 3 times) previous topic - next topic

Microbulle

J'avance un peu.

J'ai fait un bout de code qui me retourne un nomnre. Hélas, ce n'est pas le nombre de lignes comme je le supposait au départ mais je pense le nombre de caractère. Ou autre chose.

Mon fichier, pour le moment contient 3 lignes. Le code me retourne 39  :smiley-sweat:

Voila le bout de code que j'ai fait:
Code: [Select]

/* FONCTION qui retournera le nombre de ligne du fichier */
int lectureConf_NB() {
 
  int nb=0;
 
  while(myFile.read() != '\n') {
   
    nb++;
  }
  return nb;
}

/*  FONCTION qui retournera un tableau des valeurs contenus */


Je m'y suis peut-être mal pris !

SesechXP

Salut,

En effet, il y a une erreur de logique. Dans ce que tu as écrit ton compteur s'incrémente tant que le caractère lu est différent de '\n'.
Sauf que tu veux parcourir ton fichier jusqu'à la fin, c'est à dire tant que tu n'as pas trouvé le caractère nul '\0'. Et compter le nombre de '\n' rencontrés sur le parcours.

Je te laisse chercher un peu ;)

Microbulle

Merci SesechXP.

Grâce à ta piste je viens de trouver la solution.

En fait, je me suis souvenu avoir li que myFile.available() passé jusqu'au prochain caractère, sauf quand c'est un null. Ça tombe bien, c'est ce que je voulais faire !

Du coup, je n'ai plus eu à faire que:
Code: [Select]

/* FONCTION qui retournera le nombre de ligne du fichier */
int lectureConf_NB() {
 
 
  int nb=0;
 
  //Parcourir le fichier jusqu'à un caractère null
  while(myFile.available()) {
     
    //Si il est rencontrer un saut de ligne
    if(myFile.read() == '\n') {
       
      //Compter
      nb++;
    }
  }
 
  //Retourner le nombre de lignes parcouru
  return nb;
}


Bon, maintenant, je passe à la suite. La fonction qui va me retourné un tableau de String de la ligne spécifique.
Algorithmiquement parlant, je ferais ceci:
Code: [Select]

//lectureConf_LN(int ligne_a_lire)
  //aller à la ligne_a_lire
  //parcourir la ligne jusqu'au saut de ligne
    //Parser le contenu sur les ',' le dernier caractère étant le saut de ligne
    //Charger le tableau de string avec les valeurs parsés
//Fin de parcours
//Return tableau


Ensuite dans mon code, je dois me retrouver avec :
Quote
tableau[0]=MODELE-01
tableau[1]=Robot Go
tableau[2]=Robot
tableau[3]=true
tableau[4]=false
tableau[5]=false
tableau[6]=false


Il va de soit que je ne connais pas le nombre de variable à l'avance. Donc je pense limité à la seule ligne. Ensuite, je ne sait pas si par exemple, on peut faire cela:
Code: [Select]

boolean Mix_V1V2 = false;

//Charger la configuration
Mix_V1V2 = tableau[3];

//Si le mixage Voie 1 avec Voie 2 est activé
  if(Mix_V1V2) {
    //Mixage voie 1 et voie 2
    mixVoie1 = abs(voies[1] - (voies[2]-90));
    mixVoie2 = abs(voies[1] + (voies[2]-90));
   
    //Réécrire les voies avec le mixage
    voies[1] = mixVoie1;
    voies[2] = mixVoie2;
  }


Comme on va le voir, j'ai besoin de tester des cas sur du contenu de variable. Pas sûr que ça fonctionne.

Déjà, voyons pour récupérer les infos et éventuellement anticiper pour traiter ensuite les données.

Microbulle

#13
Oct 30, 2012, 05:41 pm Last Edit: Oct 30, 2012, 06:05 pm by Microbulle Reason: 1
Bon et bien, j'ai changer d'avis ! Comme quoi, il faut parfois en arrivé à un stade pour re pensé la problématique.

Donc, au lieu de gérer des lignes, très lourd et obligeant à parcourir le fichier intégrale plusieurs fois, je me suis dit que ce serais mieux d'a voir la liste de plusieurs fichiers qui eux aurait la configuration d'un modèle.

Ainsi, actuellement la SD card à 4 fichiers. memo.txt, modele-001.txt, modele-002.txt et modele-003.txt.

Je cherche à lister les fichiers étant nommé modele-xxx.txt et à les placés dans un tableau.

Voila je galère à trouvé ça bien que j'ai quelques pistes que j'essaie. Rien de probant pour le moment.

<Edit: Microbulle>

Bon, j'ai trouver une piste sérieuse. Ici : http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertMemorisationSDCardAfficheContenu

J'ai synthétisé pour faire mon code afin de garder que l'essentiel. Je n'aurais pas de répertoire à gérer donc pas autant besoin de tab. Bref le code que j'ai extrait et qui fonctionne pratiquement:

Code: [Select]

File myFile;

/* SETUP */
void setup() {
//Initialiser la carte SD
  if(initSD()) {
    //Lister les fichiers présent dans la carte SD
   
    myFile = SD.open("/");
   
    while(true) {
     
      File entry = myFile.openNextFile();
     
      if(!entry) {
        break;
      }
     
      String fichier = entry.name();
     
     
      Serial.println(fichier);
    }
   
  }
 
  //Fermer le fichier
  myFile.close();
}


Par contre voila ce que ça m'affiche:
Quote

TRASH-~1
MEMO.TXT
MODELE~1.TXT
MODELE~2.TXT
MODELE~3.TXT


Donc il me faut géré le problème des noms long et nom court. Ainsi que l'élimination de TRASH-~1 et MEMO.TXT.

Merci à ceux qui sauront m'aider.

SesechXP

La bibliothèque SD ne gère que les fichiers au nom court au format 8.3 : 8 caractères pour le nom, 3 pour l'extension.

Go Up