Pb d'écriture d'un fichier Ini dans mémo

Résolu
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 14 août 2006 à 18:08
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 16 août 2006 à 12:19
bonjour,


Après avoir créé un fichier Ini de paramètres à sauvegarder, je charge
les valeurs dans un mémo de la fiche principale pour pouvoir les lire.
Mais le fichier n'écrit que la dernière section: voici le code:


Creation :
Procedure CREATION_CFG_MINI(Sender : TObject; nomFicCFG : string);

  Var  Chaine   : String;

         CfgFile   : TIniFile;

begin

  CfgFile := TIniFile.Create(nomFicCFG);

  Chaine := 'Toto,Jean,Robert';
  CfgFile.WriteString('IDENT','Noms',Chaine);
  Chaine := '50 rue de la Paix,86000,Poitiers';
  CfgFile.WriteString('IDENT','Adresse',Chaine);

  Chaine := '186,85,0549496854';

  CfgFile.WriteString('PERSO','Physique',Chaine);

  CfgFile.Free;

end;
Affichage dans mémo:
CHARGE_MEMO1_CFG(Sender:TObject;nomFicCFG : string);

  Var  CfgFile  : TIniFile;

begin

  CfgFile := TIniFile.Create(nomFicCFG);

    With Fich_P do

    begin

      MEMO1.Clear;

      CfgFile.ReadSection('IDENT',Memo1.lines);

      CfgFile.ReadSectionValues('IDENT',Memo1.Lines);

      CfgFile.ReadSection('PERSO',Memo1.lines);

      CfgFile.ReadSectionValues('PERSO',Memo1.lines);

  CfgFile.Free;

end;
le mémo afficheseulement :
 
Physique =186,85,0549496854
y a t-il une bonne âme pour me répondre pourqoi, les sections de Ident sont écrasées?
[javascript:Insert_Emoticon('/imgs2/smile.gif'); Jean]

6 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
14 août 2006 à 18:34
Bonjour,

La réponse est simple : chacune des méthodes appelées ci-dessus commence par vider la liste de chaines reçue en argument.

La solution consiste à remplir une liste temporaire puis à ajouter son contenu dans la liste finale en utilisant la méthode AddStrings du composant TMemo :

procedure TForm1.CHARGE_MEMO1_CFG(Sender: TObject; nomFicCFG: string);
var
  CfgFile: TIniFile;
  TempList: TStringList;  //liste temporaire
begin
  CfgFile :=  TIniFile.Create(nomFicCFG);
   with  Form1 do
  begin
    MEMO1.Clear;

    TempList : = TStringList.Create;
    try
      CfgFile.ReadSection('IDENT', TempList);
      Memo1.Lines.AddStrings(TempList);

      CfgFile.ReadSectionValues('IDENT', TempList);
      Memo1.Lines.AddStrings(TempList);

      CfgFile.ReadSection('PERSO', TempList);
      Memo1.Lines.AddStrings(TempList);

      CfgFile.ReadSectionValues('PERSO', TempList);
      Memo1.Lines.AddStrings(TempList);
    finally
      TempList.Free;
    end;
  end;
  CfgFile.Free;
end;

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
15 août 2006 à 13:41
Salut,

@Delphiprog :
avec ta Procedure toutes les entrées sont doublées ce qui n'est pas des plus agréables ...

Voici que j'ai fait:
 
// celle-ci est réutilisable et pas seulement avec les TMemo:
procedure CHARGE_CFG(aStrinList : TStrings; nomFicCFG: string);
var
  CfgFile  : TIniFile;
  TempList : TStringList;  //liste temporaire
  I        : Integer;
begin
  CfgFile := TIniFile.Create(nomFicCFG);
  with aStrinList do
  begin
    Clear;
    TempList : = TStringList.Create;
    try
      CfgFile.ReadSections(TempList);
      For I := 0 to TempList.Count - 1 Do
      Begin
        Add('[' + TempList[I] + ']');
        CfgFile.ReadSectionValues(TempList[I], aStrinList);
      End;
    finally
      TempList.Free;
    end;
  end;
  CfgFile.Free;
end;

// Utilisation :
procedure TForm1.Button1Click(Sender: TObject);
begin
  CHARGE_CFG(Memo1.Lines, 'Win.Ini');
end;

//Mais pour charger un fichier ini complet dans un TMemo il y a encore plus simple :
procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('Win.Ini');
end;

@+
Cirec
3
cs_jfs59 Messages postés 178 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 2 février 2010
14 août 2006 à 18:20
Memo1.lines



c'est le contenu complet du mémo et tu l'ecrase a chaque ecriture ...




Cordialement jfs.
<hr size="2" width="100%" />
Tout est en tout et réciproquement ...
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
14 août 2006 à 18:48
Merci Jfs pour ta réponse, mais je ne la comprends pas totalement.[javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif'); ]

Memo1.lines concerne toutes les lignes,OK, CfgFile.ReadSectionValues('Section',Memo1.lines); est donné par la doc delphi.
Readsection demande un nom de section à lire. Et je ne peux écrire : CfgFile.ReadSectionValues('Section',Memo1.lines[numéro ligne]);
je ne trouve pas d'exemple dans code source.

faut-il une seule instructionpour charger les différentes sections?


Merci d'avance.
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]

Jean_Jean. 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
14 août 2006 à 18:50
Merci Delphiprog, je cogitai plus lentement !
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
16 août 2006 à 12:19
Bonjour Cirec,


Je m'étais arrangé avec la solution de Delphiprog.[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]

Mais, ta solution est superbe, jel'a mets de coté, carj'en aurai besoin plus tard.[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]


Merci à vous deux!


Jean-jean
0
Rejoignez-nous