Carte SD - programmation [mettre en tableau key et val liées] - config.txt

Très bonnes indications !
Justement je vais priofiter de ton cours pour rebondir. La mauvaise habitude que j'ai eu avec les String m'est resté :grin: Honte à moi !

Donc vers quelle type de variable s'orienté au niveau du final ?

Je demande car e viens de changer un peu la donne. En fait je vais me permettre de simplifier un peu tout ça.
Mon vichier va évoluer comme suit:

//Modèle
Robot Go

//Type
Robot

//Mix_V1V2 / Mix_V3V4
true
false

Par contre, au retour j'obtiens:

Robot Go
Robot
fals
false

Il manque un true et j'obtiens un false incomplet qui prends la place du true :disappointed_relieved:

Au niveau code quelques changements pour essayer. Tant que j'en suis à tester, autant que je teste toutes les solutions avant de me jetter dans une version finale.

#define SIZE_CONF 10  //Nombre de configuration par fichier

File myFile;  //Fichier
String tblFicMdle[SIZE_MODELE];  //Le tableau des noms des fichiers modèles
String tblFicSvg[SIZE_MODELE];  //Le tableau des noms des fichiers de sauvegardes
int nbFichierMdle;  //Nombre de fichier

/* SETUP */
void setup() {
//Initialiser la carte SD
  if(initSD()) {
    
    //Lister les fichier de sauvegardes
    listeFichier("/svgde/");
    
    //Lister les fichiers de configuration modèle
    nbFichierMdle = listeFichier("/modeles/");
    
    //Ouvrir le fichier de sauvegarde
    //ouvrirFichier("/svgde/", tblFicSvg[0]);
    
    ouvrirFichier("/modeles/", tblFicMdle[2]);
  }
}
else {
     
    //Charger les valeurs par défaut de la radio 
}

/* FONCTION listerFichier() */
int listeFichier(String chemin) {
  
  int count = 0;
  char path[SIZE_BUFFER];
  
  //Conversion du chemin
  chemin.toCharArray(path, SIZE_BUFFER);
  
  //Ouvre ce qui est défini par le chemin
  myFile = SD.open(path);
  
  //Tant que c'est vrai
  while(true) {
    
    //Prend le nom du fichier
    File entry = myFile.openNextFile();
    
    //Si c'est la fin
    if(!entry) {
      
      break;  //Sortir de la boucle
    }
    
    //Si le nombre de fichier est plus important que le nombre de place en tableau
    if(count == SIZE_MODELE) {
      
      break;  //Sortir de la boucle
    }
    
    //Si c'est le répertoire /modeles/
    if(chemin == "/modeles/") {
    
        //Rentre le nom de fichier dans le tableau des noms de modèles
        tblFicMdle[count] = entry.name();
    }
    
    //Si c'est le répertoire /sauvegarde/
    if(chemin == "/svgde/") {
        
      //Rentre le nom de fichier dans le tableau des noms de sauvegarde
      tblFicSvg[count] = entry.name();
    }
    
    count++; //Compter le nombre de fichier
  } 
  
  //Fermer le fichier
  myFile.close();
  
  //Retourner le nombre de fichier
  return count;
}

/* FONCTION qui ouvre un fichier */
void ouvrirFichier(String chemin, String fic) {
  
  //Variables
  char path[SIZE_BUFFER], bufferConf[SIZE_BUFFER];
  int i, bufferLenght, lineCounter = 0;
  String toto[SIZE_CONF];
  
  clearLcd();  //Efface l'écran
  ecrireLcd("Fichier en lecture", 01);  //Ecrire
  
  //Crée le chemin
  chemin = chemin + fic;
  
  //Transforme le chemin
  chemin.toCharArray(path, SIZE_BUFFER);
  
  //Ouvre le fichier
  myFile = SD.open(path, FILE_READ);
  
  //Si le fichier est présent
  if(myFile) {
    
    //Tant que ce n'est pas la fin du fichier
    while(myFile.available()) {
      
      
      //Récupère la ligne
      i = 0;
      while((bufferConf[i++] = myFile.read()) != '\n') {
        
        //Si la ligne dépasse le buffer
        if(i == SIZE_BUFFER) {
          
          //Finir la ligne et stopper la lecture
          while(myFile.read() != '\n') {
            
            break;
          }
        }
      }
      
      
      bufferLenght = i;  //Garder en mémoire le nombre de lettre
      bufferConf[--i] = '\0';  //Finir la ligne en retirant le saut de ligne
      
      //Serial.println(bufferConf[0]);
      //Ne pas enregistrer les lignes vides ou les commentaires
      if(bufferConf[0] == '\0' || bufferConf[0] == '/' || bufferConf[0] == '#') {
        continue;
      }
      
      toto[lineCounter] = bufferConf;
      ++lineCounter; //Compter le nombre de lignes
    }
    
    
    Serial.println(path);
    Serial.println(toto[0]);
    Serial.println(toto[1]);
    Serial.println(toto[2]);
    Serial.println(toto[3]);
    Serial.println(toto[4]);
    Serial.println(toto[5]);
    Serial.println(lineCounter);
    
    
  }
  else {
    
    clearLcd();  //Efface l'écran
    ecrireLcd("Fichier introuvable", 01);  //Ecrire
    for(;;);
  }
  
  //Fermer le fichier
  myFile.close();
  
  ecrireLcd("Fichier Ok", 01);  //Ecrire
  
  delay(1000);
}

Comme on le voie, si j'ai un commentaire, on saute, si j'ai un saut de ligne on saute.

Ne pas tenir compte de la sortie car je demande plus haut vers quoi je devrais évolué pour ne pas forcément utilisé un String :grin:

Merci.