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

Langage Delphi Discussion :

Recuperer le contenu d'une section d'un fichier ini


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut Recuperer le contenu d'une section d'un fichier ini
    Bonjour,

    j'ai un petit souci, je m'explique j'ai un fichier ini que je lit, j'affiche dans une checklistbox le nom des différentes section, lorsque je coche l'une de ces sections, j'affiche son contenu dans une autre checklistbox parametre1 = valeur1, parametre2 = valeur2 j'aimerai pouvoir afficher a la place seulement parametre1 et lorsque je clique dessus affiche sa valeur (valeur1) dans un memo par exemple, Comment puis je faire ? je n'arrive pas a récupérer uniquement la chaine de caractere parametre1 = valeur1

    Merci

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 336
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    difficile à dire comme cela, il faudrait que tu postes un peu de code.

    a priori, il faut couper la chaine "parametre1 = Valeur1" en 2 - stocker les 2 morceaux - afficher le premier dans le mémo - et coder le Double clic pour afficher la deuxième partie en fonction du numéro de ligne du mémo

    A+

    Charly

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse, le code suivant me permet d'afficher mes différentes sections dans une checklistbox

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    procedure AfficheOnClick(Sender: TfrxComponent);
    var
      FileIni : TIniFile;
      Compteur, j : Integer;
      Section, ItemSection : TStringList;
      NomFic : String;                                                                            
     
     
      begin
        Memo1.lines.clear;
        CheckListBox1.items.clear;
     
        try
          NomFic := Edit5.text;                                                                 
          FileIni := TIniFile.Create(NomFic + '.ini');  
          Section := TStringList.Create;
          ItemSection := 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],ItemSection);
              Checklistbox1.items.add(Section[Compteur]);                                                                                                    
              For j := 0 to ItemSection.Count - 1 do                                                                                                             
                Memo1.lines.add(ItemSection.Strings[j]);                                                                                                                      
            end;
        finally  
          Section.free;
          FileIni.free;
          ItemSection.free;
        end;           
      end;
    Ensuite, le code suivant permet apres avoir cliqué sur une des sections d'afficher ce qu'il contient parametre1 = valeur1
    et maintenant jaimerai a nouveau cliqué dessu pour afficher valeur1 dans un memo

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    procedure ConfirmerOnClick(Sender: TfrxComponent);
    var
      i : Integer;   
      FileIni : TIniFile;
      Compteur, j : Integer;
      Section, ItemSection : TStringList;
      NomFic : String;
     
     
     
      begin
        Memo1.lines.clear;      
        try
          NomFic := Edit5.text;
          FileIni := TIniFile.Create( NomFic + '.ini');
          Section := TStringList.Create;
     
     
          FileIni.ReadSections(section);
     
     
          for i := 0 to checklistbox1.items.count-1 do
            begin
              if checklistbox1.checked(i) then
                begin
     
                  For compteur := 0 to Section.Count-1 do
                    begin
                       FileIni.ReadSectionValues(Section[i], Memo1.lines);
                       FileIni.ReadSectionValues(Section[i], CheckListBox2.items);
     
                    end;                                                                                                             
                end;                                                     
            end;
            finally
              section.free;
              FileIni.free;    
            end;            
      end;

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 336
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Code à peaufiner :

    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
    procedure TForm1.Button13Click(Sender: TObject);
    var
      i : Integer;
      Chaine : String ;
      i1, i2, i3 : Integer ;
    begin
          Memo1.lines.clear;
          If ((checklistbox1.items.count > 0) And(checklistbox2.items.count > 0)) Then
             Begin
                for i := 0 to checklistbox1.items.count-1 do
                  begin
                    if checklistbox1.checked[i] then  i1 := i ;
                  end;
                for i := 0 to checklistbox2.items.count-1 do
                  begin
                    if (checklistbox2.checked[i]) then  i2 := i ;
                  end;
                Chaine :=  checklistbox2.Items[i2] ;
                i3 := Pos('=',Chaine) ;
                Delete(Chaine, 1 , i3 ) ;
                Memo1.lines.add(Chaine) ;
             End ;
    end;
    Après avoir exécuté tes 2 procédures et sélectionné un item dans chaque ChkListBox, tu exécutes cette procédure qui récupère la valeur correspondante dans Memo1.

    A+
    Charly

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse je viens de tester mais ca m'affiche la partie de gauche parametre1 = valeur1, moi j'aimerai recuperer valeur1, parce que j'arrive a récupérer parametre1. Mon code est le suivant, il marche comme je le souhaite seulement a chaque fois que je coche une case dans ma checklistbox et que j'appuie sur mon bouton un message d'erreur s'affiche malgré qui m'affiche le bon résultat, mon message est le suivant : indice de liste hors limite(1), le chiffre varie suivant le nombre de parametre que j'affiche dans mon autre checklistbox parametre1 parametre2 parametre3 il m'affiche la meme phrase avec un 3.

    Mon code est le suivant :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    procedure ConfirmerOnClick(Sender: TfrxComponent);
    var
      i,d : Integer;   
      FileIni : TIniFile;
      Compteur : Integer;
      Section, ItemSection : TStringList;
      NomFic : String;    
      Chaine, Chaine2 : string;                                      
     
      begin         
        Checklistbox2.items.clear;
        Listbox1.items.clear;                                                
        try
          NomFic := Edit5.text;
          FileIni := TIniFile.Create(NomFic + '.ini');
          Section := TStringList.Create;
          ItemSection := TStringList.Create;                                                                          
     
          FileIni.ReadSections(Section);
     
          for i := 0 to checklistbox1.items.count-1 do
            begin
              if checklistbox1.checked(i) then
                begin                                                                                                                                                                 
                  For compteur := 0 to Section.count-1 do
                    begin                                                                                                           
                       FileIni.ReadSectionValues(Section[i], ItemSection);                                                                                                                                                                                       
                       Chaine := gauche('=',ItemSection.strings[compteur]);                                                                                                                                                                                        
                       Checklistbox2.items.add(Chaine);                                                        
                    end;
                end;
            end;                                                                                                
        finally
          section.free;
          FileIni.free;
          ItemSection.free;
        end;                
      end;

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 662
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 662
    Points : 6 943
    Points
    6 943
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For compteur := 0 to Section.count-1 do
    A quoi sert ce for ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (11.6 - 14.6)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Par exemple si j'ai un fichier ini comme cela :
    [section1]
    parametre1 = valeur1
    parametre2 = valeur2

    si je ne met pas cette boucle lorsque je choisi dans ma premiere checklistbox section1, dans ma deuxieme checklistbox il sera afficher parametre1 seulement, alors qu'avec il sera afficher parametre1 et parametre2

  8. #8
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 336
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    chez moi mon code fonctionne :

    - tu exécutes d'abord tes 2 procédures pour afficher les items dans les 2 chekbox

    - tu sélectionnes une ligne dans chacun des Chekbox

    - tu exécutes ma procédure : dans le Memo1 s'affiche 'Valeu1", ou "Valeur2" ou ... selon les items sélectionnés

    As tu bien fait cela ?

    A+

    Charly

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Oui je crois savoir pourquoi, est ce que lorsque tu selectionne ta section donc ta premiere checklistbox, est ce que dans ta deuxieme checklistbox tu as parametre1 ou alors tu a parametre1 = valeur1, des que je fais le test en affichant parametre1 = valeur1, oui ca marche tres bien mais moi je dois afficher seulement parametre1 et ensuite valeur1 ailleurs

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Je précise avec mon code, avec le tiens lorsque j'essaye il m'affiche bien secteur1 je coche ca m'affiche parametre1 ou parametre2 et quand je coche le premier par exemple ca m'affiche parametre1 et non pas valeur1

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 336
    Points : 3 103
    Points
    3 103
    Par défaut
    Bon alors tu as changé ta deuxième fonction car ta première version affichait "parametre1= Valeur1"

    Sinon quelle est la fonction qui provoque ton erreur ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    a bon, ben la c'est ma fonction qui me permet après selection de ma section de m'afficher uniquement la partie avant le egal donc seulement parametre1 et il m'indique le message "indice de liste hors limite" :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    procedure ConfirmerOnClick(Sender: TfrxComponent);
    var
      i,d : Integer;   
      FileIni : TIniFile;
      Compteur : Integer;
      Section, ItemSection : TStringList;
      NomFic : String;    
      Chaine, Chaine2 : String;                                      
     
      begin         
        Checklistbox2.items.clear;                                                
        try
          NomFic := Edit5.text;
          FileIni := TIniFile.Create( NomFic + '.ini');
          Section := TStringList.Create;
          ItemSection := TStringList.Create;                                                                          
     
          FileIni.ReadSections(Section);
     
          if (checklistbox1.items.count>0) then
            begin
              for i := 0 to checklistbox1.items.count-1 do
                begin
                  if checklistbox1.checked(i) then
                    begin                                                                                                                                                                        
                      For compteur := 0 to Section.Count-1 do
                        begin
                          FileIni.ReadSectionValues(Section[i], ItemSection);                                                                                
                          Chaine := gauche('=',ItemSection.strings[compteur]);                                                                                                                                                                                        
                          Checklistbox2.items.add(Chaine);
                        end;                                   
                    end;
                end;
            end;                                                                                                
        finally
          section.free;
          FileIni.free;
          ItemSection.free;
        end;                
      end;
    et ici mon autre procédure qui permet après la sélection du premier et du deuxième d'afficher dans une listbox la valeur :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    procedure ConfirmationOnClick(Sender: TfrxComponent);
     var
      i, Compteur : Integer;   
      FileIni : TIniFile;
      Section, ItemSection : TStringList;    
      NomFic, Chaine, Chaine2 : string;                                      
     
      begin         
        ListBox1.items.clear;        
        try
          NomFic := Edit5.text;                        
          FileIni := TIniFile.Create( NomFic + '.ini');
          Section := TStringList.Create;
          ItemSection := TStringList.Create;                                                                           
     
          FileIni.ReadSections(Section);
     
          if (checklistbox1.items.count>0) then                                                                                  
            begin                                   
              For i := 0 to checklistbox1.items.count-1 do
                begin
                  if checklistbox1.checked(i) then
                    begin                                                                                                                                                                 
                      For compteur := 0 to Section.count-1 do
                        begin                                                                                                           
                         FileIni.ReadSectionValues(Section[i], ItemSection);                                                                                                                                                                                                                             
                         if CheckListBox2.checked(compteur) then
                           begin
                             Chaine2 := droite('=', ItemSection[compteur]);                                                                                                                                                                                                                                                                               
                             ListBox1.items.add(Chaine2);
                           end;                                                                                      
                        end;                                                                                                             
                     end;                                                     
                 end;
            end;                                                                     
        finally
          section.free;
          FileIni.free;
          ItemSection.free;
        end;                
      end;
    je dois surement mal faire quelque chose ...

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2011
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Je vous remercie de votre aide, j'ai résolu le probleme :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    procedure ConfirmerOnClick(Sender: TfrxComponent);
    var
      i,d, taille : Integer;   
      FileIni : TIniFile;
      Compteur : Integer;
      Section, ItemSection : TStringList;
      NomFic : String;    
      Chaine, Chaine2 : String;                                      
     
      begin         
        Checklistbox2.items.clear;                                                
        try
          NomFic := Edit5.text;
          FileIni := TIniFile.Create( NomFic + '.ini');
          Section := TStringList.Create;
          ItemSection := TStringList.Create;                                                                          
     
          FileIni.ReadSections(Section);
     
          if (checklistbox1.items.count>0) then
            begin
              for i := 0 to checklistbox1.items.count-1 do
                begin
                  if checklistbox1.checked(i) then
                    begin
                    FileIni.ReadSectionValues(Section[i], ItemSection);                    
                      For compteur := 0 to ItemSection.Count-1 do
                        begin                                                                                                                                                                                                                           
                          Chaine := gauche('=',ItemSection.strings[compteur]);                                                                                                                                                                                        
                          Checklistbox2.items.add(Chaine);
                        end;                                   
                    end;
                end;
            end;                                                                                                
        finally
          section.free;
          FileIni.free;
          ItemSection.free;
        end;                
      end;
    merci

  14. #14
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 336
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Oui et pour récupérer "Valeur1" dans Memo1 :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    procedure TForm1.Button15Click(Sender: TObject);
    var
      i : Integer;
      FileIni : TIniFile;
      Compteur, j : Integer;
      Section, ItemSection : TStringList;
      NomFic : String;
      Chaine : String ;
      i2, i3 : Integer ;
    begin
          Memo1.lines.clear;
          If ((checklistbox1.items.count > 0) And(checklistbox2.items.count > 0)) Then
             Begin
                 try
                   for i := 0 to checklistbox2.items.count-1 do
                     begin
                       if (checklistbox2.checked[i]) then  i2 := i ;
                     end;
                   NomFic := 'd:\toto' ;
                   FileIni := TIniFile.Create( NomFic + '.ini');
                   Section := TStringList.Create;
                   ItemSection := TStringList.Create;
                   FileIni.ReadSections(section);
                   for i := 0 to checklistbox1.items.count-1 do
                     begin
                       if checklistbox1.checked[i] then
                         begin
                           For compteur := 0 to Section.Count-1 do
                             begin
                                FileIni.ReadSectionValues(Section[i], ItemSection   );
                             end;
                         end;
                     end;
                   Chaine :=  ItemSection.Strings[i2] ;
                   i3 := Pos('=',Chaine) ;
                   Delete(Chaine, 1 , i3 ) ;
                   Memo1.lines.add(Chaine) ;
                 finally
                   section.free;
                   FileIni.free;
                 end;
             End ;
    end;
    A+

    Charly

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/08/2008, 16h29
  2. Lire le nom d'une section d'un fichier INI
    Par Flow_75 dans le forum C++Builder
    Réponses: 1
    Dernier message: 09/02/2007, 23h01
  3. Réponses: 5
    Dernier message: 22/08/2006, 11h35
  4. Comment écrire une section dans un fichier ini?
    Par Jayceblaster dans le forum Delphi
    Réponses: 5
    Dernier message: 26/06/2006, 15h08

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