Problème de tableau dynamique

John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 24 juin 2004 à 18:37
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 25 juin 2004 à 00:20
Salut à tous.

J'écris une procedure dont le but est de transformer une liste de nom du style "nom1,nom2,...,nomN" en tableau dynamique (tableau de chaine de caractères).

Voila ce que j'écris :

procedure ConstruireTableau(Source:string;Destination:array of string);
// déclaration de variables
begin
SetLength(Destination,0);

La ça coince, lors de la compilation j'ai une erreur de type (types incompatibles) .

Je nage un peu, quelqu'un a t'il une idée ?
J'ai pensé utiliser des pointeurs mais je ne suis pas sûre de moi, vu que c'est compliqué à mettre en oeuvre et à debugger.

Merci à vous.

5 réponses

cs_zmc Messages postés 147 Date d'inscription vendredi 26 avril 2002 Statut Membre Dernière intervention 26 avril 2008 1
24 juin 2004 à 20:09
Salut,
quand j'utilise des tableaux dynamiques je créer un type :

type
TTab = Array Of String;

puis je declare mes variables en type TTab.

Voila, c'est pas grand chose mais le probleme vient tres certainement de la...

a+

zmc
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
24 juin 2004 à 20:21
salut,

le problème que tu rencontres, est que tu ne peux pas déclaré un tableau dynamique dans une procedure de cette manière.

Pour pouvoir réaliser ce que tu veux, tu dois déclarer un type qui correspond à ton tableau dynamique.

voir mon exemple :

Type
   TArrayString = array of string;

procedure ConstruireTableau(Source : string; var Destination : TArrayString);
var
  sTrame : string;
begin
  Destination := nil;

  while (Source <> '') do
  begin
    SetLength(Destination, High(Destination) + 2);

    if Pos(',',Source) > 0 then
    begin
      sTrame := Copy(Source,1,Pos(',',Source) - 1);
      Delete(Source,1,Pos(',',Source));
    end
    else
    begin
      sTrame := Source;
      Source := '';
    end;

    Destination[High(Destination)] := sTrame;
  end;
end;


Bonne prog ;)
Loulibier
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 juin 2004 à 20:53
Merci de vos réponses !

@ Loulibier
On joue pas dans la même cours j'ai l'impression car j'ai rien compris à ton code :I !
Va falloir que j'épluche l'aide de Delphi je pense ...

Bon sinon je vais déclarer mon type APRES la déclaration de la fonction, donc Delphi risque de ne pas aimer non plus.

Me trompe-je ?

Merci en tout cas de votre aide ;).
0
Loulibier Messages postés 309 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 24 septembre 2008 2
24 juin 2004 à 23:52
Mon code est si compliquer que ça ? :-p

Type
TArrayString =  array of string;  // Déclaration d'un type (tableau de string) 

procedure ConstruireTableau(Source : string; var Destination : TArrayString);
var
sTrame : string;
begin
Destination : = nil; // Initialisation du tableau à 0 valeur.

// executé tant que Source n'est pas vide
while (Source <> '') do
begin
// agrandissement du tableau d'un élément.
SetLength(Destination, High(Destination) + 2);

s'execute si il trouve ',' dans la trame Source
if Pos(',',Source) > 0 then
begin
 // copie la chaine juste avant le ',' dans la variable strame
sTrame :=  Copy(Source,1,Pos(',',Source) - 1);
 // enlève dans source l'élement ecrit dans sTrame ainsi que ',' 
Delete(Source,1,Pos(',',Source));
end
else
begin
// Copie le dernier élément dans sTrame pour le stocker dans le tableau
sTrame : = Source;
// met à blanc le Source pour sortir de la boucle while
Source :=  '';
end;

  // écrit l'élément récupéré du source dans le tableau. 
Destination[High(Destination)] : = sTrame;
end;
end;


Je n'ai peut être pas compris ce que tu voulais réalisé ? ;)

pourquoi veux tu déclarés ton Type après la déclaration de ta function ?

Ta fonction ne pourra pas l'utiliser car elle ne la connaitra pas !
0

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

Posez votre question
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
25 juin 2004 à 00:20
Re.

Ca y est, tout marche 8-) !
En fait je n'avais pas mis le mots "var" dans la déclaration de ma fonction.

Encore merci à toi !

Promis quand j'ai fini (si j'ai le courage d'aller au bout :blush) ), je vous mets les sources ...

++
0
Rejoignez-nous