IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Lire la totalité d'un fichier ini


Sujet :

Delphi

  1. #1
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    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
    Inscrit en
    Septembre 2008
    Messages
    5 679
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 679
    Points : 13 082
    Points
    13 082
    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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    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
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 029
    Points : 40 927
    Points
    40 927
    Billets dans le blog
    62
    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
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ 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