Lecture fichier .ini [Résolu]

Signaler
Messages postés
4
Date d'inscription
jeudi 16 mars 2006
Statut
Membre
Dernière intervention
19 avril 2006
-
Messages postés
304
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
10 mars 2012
-
Bonjour,
j'ai un petit problem pour la lecture de mon point ini.
je n'arrive pas a savoir combien il y a de clé dans chaque section et ni les recupperer avec leur valeur .
de plus les valeurs que je veux recupperer doivent etre en string et non en tstrings.
Pouvez vous m'aider ?
merci d'avance

voici la tete de mon point ini:

[LabCh F11 10Deg]
couleur Std_00004=couleur,Std_00004,LabCh,F11,10Deg,26.9113159179687,31.8990821838379,32.88
couleur Std_00001=couleur,Std_00001,LabCh,F11,10Deg,37.8929672241211,35.3700294494629,33.86
couleur Std_00006=couleur,Std_00006,LabCh,F11,10Deg,33.0061149597168,60.8440361022949,93.55
couleur Std_00003=couleur,Std_00003,LabCh,F11,10Deg,6.37308883666992,6.30886840820312,6.226
couleur Std_00008=couleur,Std_00008,LabCh,F11,10Deg,3.80428123474121,3.69724774360657,3.617
couleur Std_00005=couleur,Std_00005,LabCh,F11,10Deg,8.74617767333984,8.05198764801025,7.605
couleur Std_00002=couleur,Std_00002,LabCh,F11,10Deg,21.1437301635742,27.5718650817871,33.63
couleur Std_00007=couleur,Std_00007,LabCh,F11,10Deg,14.6605501174927,15.2568807601929,15.89
[LabCh D65 10Deg]
test Std_00002=test,Std_00002,LabCh,D65,10Deg,26.7461776733398,31.7706413269043,32.79510879
test Std_00019=test,Std_00019,LabCh,D65,10Deg,27.0978584289551,32.1070327758789,33.08256912
test Std_00018=test,Std_00018,LabCh,D65,10Deg,3.27217125892639,3.20489287376404,3.165137529
test Std_00013=test,Std_00013,LabCh,D65,10Deg,26.6636085510254,31.660551071167,32.660549163
test Std_00010=test,Std_00010,LabCh,D65,10Deg,27.1039752960205,32.1681938171387,33.08868408
test Std_00011=test,Std_00011,LabCh,D65,10Deg,27.1590213775635,32.2293586730957,33.14984893
test Batch_00001=test,Batch_00001,LabCh,D65,10Deg,27.131498336792,32.2324142456055,33.18960
test Std_00012=test,Std_00012,LabCh,D65,10Deg,26.5718650817871,31.5321102142334,32.54740142
test Std_00009=test,Std_00009,LabCh,D65,10Deg,27.0978584289551,32.1070327758789,33.08256912
test afich Std_00004=test afich,Std_00004,LabCh,D65,10Deg,3.18654441833496,3.1651375293731
test afich Std_00001=test afich,Std_00001,LabCh,D65,10Deg,3.19571876525879,3.1498470306396

5 réponses

Messages postés
1173
Date d'inscription
mercredi 2 novembre 2005
Statut
Membre
Dernière intervention
10 septembre 2011
3
Pour les récupérer il y a plus simple : tu nommes chaque ligne et tu récupère le nom de la ligne. Par exemple si tu auras ça :

[LabCh F11 10Deg]
Couleur1 = couleur Std_00004=couleur,Std_00004,LabCh,F11,10Deg,26.9113159179687,31.8990821838379,32.88

et dans ton programme par exemple :

Uses TInifiles;

With TIniFile.Create (LE CHEMIN)

Edit1.Text:=ReadString('LabCh F11 10Deg','Couleur1', Valeur par défaut);

J'espère que ça répond à ta question sinon donne plus de précisions, le contexte ou autre...

Matt


La paresse est la mère du génie...
Messages postés
304
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
10 mars 2012

pour l'enumération des clés c'est très simple !!! mais il faut obligatoirement passer par un TStrings

procedure TForm1.Button1Click(Sender: TObject);
var
Strings : TStrings;
I : Integer;
begin
Strings := TStringList.Create;
with TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'MyIni.ini') do
begin
ReadSection('MySection' , Strings); //<=== recupère toutes les clés
for i := 0 to Strings.Count -1 do
begin
ShowMessage(Format('Clé :%s Valeur %s' , [Strings[i] , ReadString('MySection' , Strings[i], 'Vide')]));
end;//i++
Free;
end;
Strings.Free;
end;

pour les sections uniquement c'est "ReadSections" qu'il faut utiliser !!!
Messages postés
4
Date d'inscription
jeudi 16 mars 2006
Statut
Membre
Dernière intervention
19 avril 2006

Merci pour l'info ca m'a bien aidé.

J'aurai aimé savoir aussi comment peut on supprimmer des clé lorsqu'elles ont été lu mais pas toutes les clées d'une section juste celles qui sont nommé test affich par exemple?

[LabCh D65 10Deg]
test Std_00002=test,Std_00002,LabCh,D65,10Deg,26.7461776733398,31.7706413269043,32.79510879
test Std_00019=test,Std_00019,LabCh,D65,10Deg,27.0978584289551,32.1070327758789,33.08256912
test Std_00018=test,Std_00018,LabCh,D65,10Deg,3.27217125892639,3.20489287376404,3.165137529
test Std_00013=test,Std_00013,LabCh,D65,10Deg,26.6636085510254,31.660551071167,32.660549163
test Std_00010=test,Std_00010,LabCh,D65,10Deg,27.1039752960205,32.1681938171387,33.08868408
test Std_00011=test,Std_00011,LabCh,D65,10Deg,27.1590213775635,32.2293586730957,33.14984893
test Batch_00001=test,Batch_00001,LabCh,D65,10Deg,27.131498336792,32.2324142456055,33.18960
test Std_00012=test,Std_00012,LabCh,D65,10Deg,26.5718650817871,31.5321102142334,32.54740142
test Std_00009=test,Std_00009,LabCh,D65,10Deg,27.0978584289551,32.1070327758789,33.08256912
test afich Std_00004=test afich,Std_00004,LabCh,D65,10Deg,3.18654441833496,3.1651375293731
test afich Std_00001=test afich,Std_00001,LabCh,D65,10Deg,3.19571876525879,3.1498470306396
Messages postés
304
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
10 mars 2012

bah c'est exactement la même chose !! sauf qu'on ajoute une petite vérification

procedure TForm1.Button1Click(Sender: TObject);
var
Strings : TStrings;
I : Integer;
begin
Strings := TStringList.Create;
with TIniFile.Create(ExtractFilePath(Application.ExeName)+ 'MyIni.ini') do
begin
ReadSection('LabCh D65 10Deg' , Strings); //<=== recupère toutes les clés
for i := 0 to Strings.Count -1 do
begin
if SameText(Copy(Strings[i], 1 , 4), 'test') then // on compare
DeleteKey('LabCh D65 10Deg' , Strings[i]);
end;//i++
Free;
end;
Strings.Free;
end;

voilà ça efface toutes les clés commencant par 'test', nota pour SameText il faut inclure SysUtils dans la clause USES si ce n'est pas déja fait !!!
Messages postés
304
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
10 mars 2012

Nota : SameText se fiche de la casse donc tu peux mettre Test où TEst c'est pareil ;)