Traitement fichier .ini







Lecture des éléments d'un fichier .ini
sur  une carte SD







// -----------------------------------
// Lecture de fichier ini sur carte SD
// Sur MEGA Port 53
// -----------------------------------
#include <SPI.h>
#include <SD.h>

//byte finligne=0x0D;
char finligne='\n';
char carlu;
String maligne;
int age;


// Tableaux des informations du fichier INI (50 parametres)
String IniCle[50];
String IniVal[50];
int NbrCle;

// --------------
// Initialisation
// --------------
void setup()
{
 // Ouverture du port serie
  Serial.begin(9600);
  Serial.println("Ouverture SD card...");
  
  // Ouverture carte SD
  pinMode(53, OUTPUT);   
  if (!SD.begin(4)) 
  {
    Serial.println("Echec ouverture Carte SD ...");
    return;
  }
  Serial.println("Carte SD Prete ...");
  
  // Chargement du fichier ini
  IniCharge();
  
  // Monitoring des tableaux de parametres 
  for (int i=0; i<NbrCle; i++)
  {
    Serial.print(IniCle[i]);
    Serial.print('\t');
    Serial.println(IniVal[i]);
  }
  
  // Pour tester, on demande la clé "Age" du fichier 
  Serial.println(IniDonneValeurAlpha("Age"));
  age=IniDonneValeurNum("Age");
  Serial.println(age);
  
}
  
// ----------
// Traitement
// ----------
void loop()
{
  
  
}

// -----------------------------------------------------------------------------
// Chargement du fichier (Obligatoirement une constante dans le sd.open, domage)
// Charge 2 tableaux ( à définir dans le code principal) : 
// IniCle : Liste des clés du fichier ini
// IniVal : Liste des valeurs des clés
// Une fois ce traitement effectué, la valeur des clées peut etre retrouvée avec la fonction IniDonnevaleur(Nomdelacle)
// ------------------------------------------------------------------------------
void IniCharge()
{
  // Variables de travail
  File MonFichier;
  
  // Ouverture du fichier 
  MonFichier = SD.open("test.ini", FILE_READ);
  
  // Si le fichier est ouvert, on le lit 
  if (MonFichier) 
  {
    // Boucle de traitement du fichier 
    while (MonFichier.available()) 
    {
      // Lecture du caractere suivant
      carlu=MonFichier.read();
      
      // Si le caractere lu est une fin de ligne, on traite la ligne
      if (carlu==finligne)
      {
        // Traitement de la ligne lue
        IniTraiteLigne();
        maligne="";
      }
        // sinon, on continue à alimenter la ligne
      else maligne+=carlu;
    }
    
    // On traite la derniere ligne constituée
    IniTraiteLigne();
    
    // Fermeture du fichier
    MonFichier.close();
    Serial.println("Fichier ferme");
  } 
  else 
  {
    // Le fichier n'a pas été ouvert
    Serial.println("Erreur ouverture du fichier test.ini");
  }
} 

// -----------------------------------------------------------
// Renvoie la valeur d'une clé du fichier .ini lu précédement 
// En entrée : Nom de la clé recherchée
// En sortie valeur de cette clé
// -----------------------------------------------------------
String IniDonneValeurAlpha(String _Cle)
{
  for (int i=0; i<NbrCle; i++)
  {
    if (IniCle[i]==_Cle) 
    return IniVal[i];
  }
  return "";
}
// -----------------------------------------------------------
// Renvoie la valeur d'une clé du fichier .ini lu précédement 
// En entrée : Nom de la clé recherchée, type de sortie désirée 
// En sortie valeur de cette clé
// -----------------------------------------------------------
int IniDonneValeurNum(String _Cle)
{
  for (int i=0; i<NbrCle; i++)
  {
    if (IniCle[i]==_Cle) 
    {
      String  myString = IniVal[i];
      int myStringLength = myString.length()+1;  
      char myChar[myStringLength];
      myString.toCharArray(myChar,myStringLength);
      return atoi(myChar); 
    }
  }
}

 // ----------------------
 // Traitement d'une ligne 
 // ----------------------
void IniTraiteLigne()
 {
   // On remplace les tabulations dans la ligne par des blancs
    maligne.replace('\t',' ');
    
    // On supprime les blancs non significatifs en début et fin de ligne 
    maligne.trim();       
    
    // On ignore les lignes à vide ou les commentaires (# ou //)
    if (maligne=="" || maligne.startsWith("#") || maligne.startsWith("//"))
    {
      maligne="";
      return;
    }        
    
    // on ajoute la clé et la valeur dans le tableau
    IniCle[NbrCle]=maligne.substring(0,maligne.indexOf('='));
    IniVal[NbrCle]=maligne.substring(maligne.indexOf('=')+1);
    NbrCle++;  // On incrémente l'index APRES car le tableau commence à 0 ...
 }

1 commentaire:

  1. Très bien excellent, dommage que rien ne soit prévu pour créer un fichier ini, mais c'est une bonne base pour en créer.
    Merci beaucoup pour le partage, car il est vrai que des sites (ou blog) en Français sont assez rares.

    RépondreSupprimer