Lire un tableau dans un ini ?

Résolu
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 16 févr. 2006 à 19:19
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 17 févr. 2006 à 20:54
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

Emandhal Messages postés 194 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 3
17 févr. 2006 à 18:25
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...
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
17 févr. 2006 à 02:51
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
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
17 févr. 2006 à 10:04
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.
0
vaughan Messages postés 198 Date d'inscription mardi 6 août 2002 Statut Membre Dernière intervention 29 octobre 2008
17 févr. 2006 à 10:51
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
0

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

Posez votre question
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
17 févr. 2006 à 16:06
Je pourrais aussi faire mes fichier ini en XML...
0
Emandhal Messages postés 194 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 3
17 févr. 2006 à 18:27
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...
0
Emandhal Messages postés 194 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 3
17 févr. 2006 à 18:28
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...
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
17 févr. 2006 à 20:54
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.
0