1. #1
    Membre averti Avatar de cantador
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    mars 2006
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mars 2006
    Messages : 489
    Points : 377
    Points
    377

    Par défaut Lire la totalité d'un fichier ini

    Bonjour à tous,

    je reprends ce code de la FAQ, censé lire la totalité d'un fichier ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Var FileIni  : TIniFile; 
        Compteur : Integer; 
        Section  : TStringList;  
    begin 
     FileIni:=TIniFile.Create('C:\Temp\Test.ini'); // Ouvre ou crée le fichier 
     try 
      Section:=TStringList.Create;   
      FileIni.ReadSections(Section);   
      For Compteur:=0 to Section.Count-1 do 
       begin 
           // Lecture des valeurs de la section Section[Compteur] 
          Memo1.Lines.Add(#13#10+'['+Section[Compteur]+']'); 
          FileIni.ReadSectionValues(Section[Compteur],Memo1.Lines); 
       end; 
     finally 
    //  Valeur.Free; 
      Section.Free; 
      FileIni.Free ; 
     end ; 
    end;
    si on le teste sur un fichier comme ceci :

    [PREFACE]
    deb = maison

    [SUITE]
    fin = jardin

    [FINAL]
    n0=table
    n1=jouet
    n2=camion
    n3=chaise
    n4=lampe
    n5=crayon

    on obtient dans le mémo :

    n0=table
    n1=jouet
    n2=camion
    n3=chaise
    n4=lampe
    n5=crayon

    Si on met un point d'arrêt, on s'aperçoit que le code fonctionne mais il écrase les données précédentes
    donc, il est nécessaire soit de stocker le nombre d'enregistrements dans chaque section ou
    de récupérer dans un premier temps la liste des sections et de boucler sur ces dernières.

    Qu'en pensez-vous ?

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    4 436
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 436
    Points : 9 032
    Points
    9 032

    Par défaut

    La FAQ n'est pas correcte, il faut une StringList supplémentaire pour la récupération des valeurs.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 434
    Points : 19 696
    Points
    19 696
    Billets dans le blog
    4

    Par défaut

    Bonjour,

    J'aurais aimé avoir le lien sur la FAQ citée mais bon. Effectivement il y a un souci du fait que ReadSectionValues remplace toutes les lignes de la Stringlist (memo1.lines)
    d'un autre côté un memo1.lines.LoadFromFile('C:\Temp\Test.ini') fait la même chose


    Voilà ce que j'écrirais (en rouge) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Var FileIni  : TIniFile; 
        Compteur : Integer; 
        Section,Valeurs  : TStringList;
    begin 
     FileIni:=TIniFile.Create('C:\Temp\Test.ini'); // Ouvre ou crée le fichier 
     try 
      Section:=TStringList.Create;   
      Valeurs:=TStringList.Create;  
      FileIni.ReadSections(Section);   
      For Compteur:=0 to Section.Count-1 do 
       begin 
           // Lecture des valeurs de la section Section[Compteur] 
          Memo1.Lines.Add(#13#10+'['+Section[Compteur]+']'); 
          FileIni.ReadSectionValues(Section[Compteur],Valeurs);
          Memo1.Lines.AddStrings(Valeurs); 
       end; 
     finally 
      Valeurs.Free; 
      Section.Free; 
      FileIni.Free ; 
     end ; 
    end;
    Note : avec Tokyo 10.2 lors de mon test, impossible d'obtenir les sections sans avoir fait une première lecture, alors qu'en remplaçant IniFile par MemIniFile pas de soucis. Si quelqu'un a une explication ?

    [Edit] j'ai envoyé une notification aux responsables du forum
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  4. #4
    Membre averti Avatar de cantador
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    mars 2006
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : mars 2006
    Messages : 489
    Points : 377
    Points
    377

    Par défaut

    merci à tous les deux pour votre efficacité
    le problème est réglé
    je laisse le post ouvert pour la question soulevée par SergioMaster
    @bientôt

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 434
    Points : 19 696
    Points
    19 696
    Billets dans le blog
    4

    Par défaut

    Bonjour,
    Citation Envoyé par SergioMaster Voir le message
    j'ai envoyé une notification aux responsables du forum
    FAQ modifiée par mes soins (merci aux responsables du forum qui ont élevé mes droits pour pouvoir le faire )

    je passe le post en résolu car ma petite question est loin d'être vitale, tout au plus à peine existentielle
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire les cles d'un fichier .ini
    Par dalio dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 08/02/2009, 23h43
  2. lire et ecrire dans les fichiers INI sans MFC
    Par skeltryx dans le forum C++/CLI
    Réponses: 10
    Dernier message: 24/04/2007, 10h03
  3. lire la totalité d'un fichier
    Par maz dans le forum C
    Réponses: 5
    Dernier message: 19/10/2006, 19h37
  4. [VB.Net] Comment lire une url depuis un fichier .ini ?
    Par lewebdalex dans le forum VB.NET
    Réponses: 7
    Dernier message: 06/05/2006, 21h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo