Lire un tableau dans un ini ? [Résolu]

Signaler
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
-
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
-
Existe t'il un moyen de lire et d'ecrire une clef du genre

[MaSection]
MaClef=1,8,4800,1,1

Plutot que de stocker autant de lignes que de valeurs ?

8 réponses

Messages postés
199
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
10 octobre 2006
2
Personnellement j'aurais donné la String renvoyée par le ini à un TStringList.CommaText :
aStringList.CommaText := ini.ReadString(aSection, aKey, '');
Et après suffit de faire :
SetLength(MonArray, aStringList.Count);
Puis une tite boucle...
For z := 0 to aStringList.Count-1 do
MonArray[z] := IntToStr(aStringList[z]);

et... ah bah c'est fini ^^

Tout problème a sa solution... Mais en général, c'est jamais la bonne...
Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
Salut,
la seule solution à ma conaissance c'est d'utiliser un String pour l'écrire et de te faire une fonction pour la lire à nouveau.

J'avais fait un truc similaire pour lire et écrire les valeurs d'un TRect en une ligne dans un fichier Ini:

Function RectToStr(Value : TRect) : String;
Const Mask = '%d, %d, %d, %d';
Begin
With Value do
Result : = Format(Mask, [Left, Top, Right, Bottom]);
End;

Function StrToRect(Separateur, Str: String): TRect;
Var TmpStr : String;
Begin
TmpStr := EmptyStr;
If ((Str <> EmptyStr) And (Separateur <> EmptyStr)) And (Pos(Separateur, Str) > 0) Then
Begin
TmpStr : = Copy(Str, 1, Pos(Separateur, Str) - 1);
Result.Left := StrToIntDef(TmpStr, 0);
Str := Copy(Str, Pos(Separateur, Str) + 1, High(Integer));
If Pos(Separateur, Str) > 0 Then
Begin
TmpStr : = Copy(Str, 1, Pos(Separateur, Str) - 1);
Result.Top := StrToIntDef(TmpStr, 0);
Str := Copy(Str, Pos(Separateur, Str) + 1, High(Integer));
End ;
If Pos(Separateur, Str) > 0 Then
Begin
TmpStr : = Copy(Str, 1, Pos(Separateur, Str) - 1);
Result.Right := StrToIntDef(TmpStr, 0);
Str := Copy(Str, Pos(Separateur, Str) + 1, High(Integer));
End ;
Result.Bottom : = StrToIntDef(Str, 0);
End;
End;

ce n'est qu'un exemple on peut faire mieux surtout réduire le code mais bon c'est plus cher
et en suite le reste est simple

@+
Cirec
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
Ah ben voila, je le sentais vieindre, le coup du faut passer par un string, Ouinnnnnn.......

Bah, je vais m'écrire un StrToArray basésur ton exemple, Cirec.

C'est dans ce genre de cas que des capacités Cobol-like seraient bien venues dans delphi.

Merci.
Messages postés
198
Date d'inscription
mardi 6 août 2002
Statut
Membre
Dernière intervention
29 octobre 2008

Polémique !!! Ce pauvre delphi !!!

Comme tu pourrais si bien le faire tu n'as qu'a créer un TIniFileArray héritant de TIniFile et créer une méthode ReadArray et le tour est joué.
En plus tu envois ta source à Borland (enfin il essai de vendre leurs IDE) et nous petits développeurs on réccupère le TIniFileArray

Merci à toi !!!

vaughan
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
Je pourrais aussi faire mes fichier ini en XML...
Messages postés
199
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
10 octobre 2006
2
Pour écrire... même chose mais à l'envers...

et puis cette méthode permet d'avoir des Array de taille différents sans que la transformation pose de problèmes.

Tout problème a sa solution... Mais en général, c'est jamais la bonne...
Messages postés
199
Date d'inscription
dimanche 2 mars 2003
Statut
Membre
Dernière intervention
10 octobre 2006
2
oops désolé, je m'a trompouillé ^^'

For z := 0 to aStringList.Count-1 do
MonArray[z] := StrToInt(aStringList[z]);

Tout problème a sa solution... Mais en général, c'est jamais la bonne...
Messages postés
459
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
1
C'est cool ca, ca me permet en plus de savoir combien d'élément on été lu, donc de vérifier l'intégrité du ini dans une certaine mesure.