perou2040
Messages postés9Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention11 mai 2006
-
10 mai 2006 à 16:24
perou2040
Messages postés9Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention11 mai 2006
-
12 mai 2006 à 09:08
re
j'ai avancé ds le programme et un autre probleme se pose, l'incompatibilité d string et Tstring.
je souhaiterais récupérer toutes les sections d'un .ini dans un tableau où chaque ligne du tableau comporte une section.j'ai essayé de contourner en mettant les section ds une liste puis ds un tableau mais ca ne marche pa.
voici mon code qui ne marche pa, si vous voyez ou je dois modifier:
merci d'avance
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 10 mai 2006 à 16:52
type
TStringArray = array of string;
var
SectionsTable: TStringArray;
function GetSections(var ASecTable: TStringArray) : integer;
var SectionsList : TStringList;
i : integer;
begin
// si l'objet LangIni n'est pas créé, on quitte la methode
// et on renvois "-1"
if not assigned(LangIni) then begin
result := -1;
exit;
end;
// on crée l'objet SectionsList
SectionsList := TStringList.Create;
// on recupere les sections
LangIni.ReadSections(SectionsList);
// on definit la taille du tableau par rapport aux nombres de sections
SetLength(ASecTable, SectionsList.count);
// si il y a des sections
if SectionsList.count <> 0 then
// on remplis la table
for i := 0 to high(ASecTable) do
ASecTable[i] := SectionsList.Strings[i];
// enfin, on libre l'objet SectionsList
SectionsList.free;
// et on renvois le nombre d'enregistrements du tableau
Result := Length(ASecTable);
end;
// on l'utiliseras comme cela :
var CountSections, N : integer;
begin
CountSections := GetSections(SectionsTable);
if CountSections = -1 then
... erreur LangIni pas disponible ...
if CountSections = 0 then
... pas de sections trouvées
if CountSections > 0 then
for N := 0 to CountSections do
.... SectionsTable[N];
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 10 mai 2006 à 19:22
Dis, perou2040, pourquoi veux-tu "transvaser" le contenu du TStrings dans un array of string alors qu'il est bien plus facile et souple d'utiliser un TStrings ??
Si tu ne te plantes pas ......
tu ne pousseras jamais
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 10 mai 2006 à 19:24
NBqui ne sert à rien :
f0xi le test de if SectionsList.count <> 0 then n'est pas nécessaire puique ce sera fait en interne par le code généré pour la boucle 'for'.
Voila c'est tout mais en même temps, je vous avait prévenu
Si tu ne te plantes pas ......
tu ne pousseras jamais
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 11 mai 2006 à 15:13
Et pour completer elguevel, TStrings ou TStringList correspond à un array of string sauf que c'est plus complet et beaucup plus simple à gérer.
Fais un tour dans l'aide de Delphi car tout y est expliqué.
Et valide une réponse si elle te convient.
Si tu ne te plantes pas ......
tu ne pousseras jamais
perou2040
Messages postés9Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention11 mai 2006 11 mai 2006 à 15:41
tinkiet je v en valider de la réponse.quand le code tournera.car de vue il devrait marcher. et merci de m'avoir expliqué les nuances de strings.
pour l'instant je crois que l'erreur est simple mais je me cass la tete depuis quelque heures (é oui je débute).
bon a la compilation il me di pr la déclaration de la fonction :
- "Identificateur non déclaré : 'TStringDynArray'"
-Expression attendu(e) mais 'ARRAY' trouvé(e)
-Le paramètre par défaut 'ASecTable' doit être par valeur ou const
ensuite j'ai un "type incompatible" qui doit venir a mon avis du "SectionsList.count"
si vous pensez savoir ou est cette erreur faite moi signe.merci
je laiss le début du code sinon ensuite c le meme qu'en haut:
unit principale;
interface
uses
...
type
TForm1 = class(TForm)
TStringDynArray : array of string;
function GetSections(var ASecTable : TStringDynArray) : integer;
...
function TForm1.GetSections(var ASecTable: TStringDynArray):integer;
var ...
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 11 mai 2006 à 16:52
C'est normal: il faut que tu déclares le type TStrinDynArray avant ou après la déclaration de la fiche (en tout cas avant celle de la fonction ^^)
Là, dans ton code, tu le déclares dedans, c'est pour cela que ça ne marche pas.
Et, en plus, tu ne déclares pas un type, mais une variable dans la classe TForm ...
Bref, le cours sur les types est à revoir.
Pour te donner la réponse, ça doit ressembler à ça (partie interfcace seulement) :
<hr size= "2" width="100%"> unit Unit1;
perou2040
Messages postés9Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention11 mai 2006 12 mai 2006 à 09:08
ahhhhhhhh!!!! delphi de *¤!"~°! c'est ce que j'avais fait au départ... j'en reviens pas, c'est mon delphi qui plante parfois, et parfois il n'y a pas d'erreur mais il ne compile pas...c'est galère...