Concaténer deux tableaux dynamiques [Résolu]

ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 29 déc. 2008 à 19:05 - Dernière réponse : Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention
- 30 déc. 2008 à 22:42
Bonjour,

Je cherche depuis un petit moment le moyen de concaténer deux tableaux dynamiques (dynamic array of char).
Existe-t-il une fonction simple du genre concat ou insert permettant de réaliser cette opération sans être obligé de devoir s'occuper de tous les éléments des deux tableaux par l'intermédiaire d'une boucle?
Merci d'avance

Bonnes fêtes de fin d'année
@+
Nico { www.ni69.info }
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 30 déc. 2008 à 17:55
3
Merci
Merci à tous pour votre contribution !
Effectivement la fonction move est adaptée à ce genre de situations.
Je ne savais pas que l'on pouvait l'employer comme cela sur des tableaux dynamiques!

Il y a cependant une petite erreur dans to code f0xi :

move(A1[L1+1], A2[0], L2);
doit être modifié en :
move(A2[0], A1[L1], L2);

L'ordre des paramètres de move est en effet : Source, Dest, Count
De plus, L1 est déjà la longueur de A1 (indexé à partir de 0), dont inutile d'ajouter 1

@+
Nico { www.ni69.info }

Merci ni69 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de ni69
Meilleure réponse
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 30 déc. 2008 à 19:23
3
Merci
Génial le truc de f0xi! 




NB: (extrait de l'aide)
Quand vous transmettez un tableau comme paramètre tableau ouvert par valeur, le compilateur crée une copie locale du tableau à l'intérieur du cadre de pile de la routine. Attention : vous ne devez pas provoquer de débordement du cadre de pile en transmettant de gros tableaux.

Merci Caribensila 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Caribensila
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 30 déc. 2008 à 19:36
3
Merci
ouai c'est chouette mais attention à la taille des données ...

ici, par chance, le problème ne se pose pas puisque SizeOf(Char) = 1

mais pour bien faire il faudrait l'écrire comme ceci :

Move(A2[0], A1[L1], L2 * SizeOf(Char) );

 
@+
Cirec

<hr siz ="" />

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 30 déc. 2008 à 22:17
3
Merci
@cari : l'aide précise bien le type de passage des paramètres :
"
Quand vous transmettez un tableau comme paramètre tableau ouvert par valeur".

Dans presque tous les cas de figure, il est préférable de transmettre par adresse (var, const ou encore out) car cela peut aussi améliorer sensiblement les performances.

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 29 déc. 2008 à 19:43
0
Merci
Bonnes fêtes à toi, Nico!

Les tableaux dynamiques étant implicitement des pointeurs, je ne pense pas que ce soit possible.
Commenter la réponse de Caribensila
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 30 déc. 2008 à 05:37
0
Merci
type
  TDAOC = array of char;

procedure ConcatDAOC(var A1: TDAOC; const A2: TDAOC);
var L1, L2: integer;
begin
  L1 := Length(A1);
  L2 := Length(A2);
  SetLength(A1, L1+L2);
  Move(A1[L1+1], A2[0], L2);
end;

Commenter la réponse de f0xi
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 30 déc. 2008 à 16:34
0
Merci
Ok foxi (comme d'hab'), mais à condition que ce soit deux tableaux simples, pas des tableaux multidimensionnels ou je me trompe ?

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 30 déc. 2008 à 16:38
0
Merci
Y'a qq chose qui m'échappe. 
Chez moi, ça ne fonctionne pas.
Commenter la réponse de Caribensila
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 30 déc. 2008 à 16:49
0
Merci
J'ai essayé comme ça :

type
  TDAOC = array of char;



procedure ConcatDAOC(var A1: TDAOC; const A2: TDAOC);
  var L1, L2: integer;
  begin
  L1 := Length(A1);
  L2 := Length(A2);
  SetLength(A1, L1+L2);
  Move(A1[L1+1], A2[0], L2);
end;



procedure TForm1.Button1Click(Sender: TObject);
  var   A, B : TDAOC;
         i : Integer;
  begin
  SetLength(A, 2);
  A[0] :='a';
  A[1] :='b';
  SetLength(B, 3);
  B[0] :='c';
  B[1] :='d';
  B[2] :='e';
  ConcatDAOC(A,B);
  for i := 0 to 4 do Memo1.Lines.Add(A[i]);
end;

Dans le Memo, je n'ai que le tableau A...
Commenter la réponse de Caribensila
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 30 déc. 2008 à 17:11
0
Merci
... Avec D7
Commenter la réponse de Caribensila
ni69 1529 Messages postés samedi 12 juin 2004Date d'inscription 5 juillet 2010 Dernière intervention - 30 déc. 2008 à 18:00
0
Merci
@Delphiprog :

Je n'arrive pas trop à me représenter ce que serait une concaténation de tableaux multidimensionnels dynamiques... Ca doit être assez exotique! 

@+
Nico { www.ni69.info }
Commenter la réponse de ni69
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 30 déc. 2008 à 22:42
0
Merci
Oui. C'est d'ailleurs ce qu'a fait f0xi. Et que je voulais, maladroitement, souligner.

Et, si j'ai bien compris, on pourrait concaténer des tableaux dynamiques de types différents..?
Commenter la réponse de Caribensila

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.