1. #1
    Membre averti Avatar de cantador
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    mars 2006
    Messages
    486
    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 : 486
    Points : 375
    Points
    375

    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 343
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 4 343
    Points : 8 773
    Points
    8 773

    Par défaut

    La FAQ n'est pas correct, 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 200
    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 200
    Points : 18 781
    Points
    18 781
    Billets dans le blog
    4

    Par défaut

    Bonjour,

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


    Voilà ce que j'écrirai (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 que 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
    486
    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 : 486
    Points : 375
    Points
    375

    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 200
    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 200
    Points : 18 781
    Points
    18 781
    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, 22h43
  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, 09h03
  3. lire la totalité d'un fichier
    Par maz dans le forum C
    Réponses: 5
    Dernier message: 19/10/2006, 18h37
  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, 20h32

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