"Concaténation" de tableaux

[Résolu]
Signaler
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
Salut à tous.
(pas très important mais bon): W2k SP4=> VB6 SP6

après avoir cherché un peu, je n'ai pas trouvé mon bonheur.
J'aimerais savoir si il existe une API permettant d'ajouter le contenu d'un tableau à un autre tableau
Dans mon exemple suivant que je sais incorrect
Dim Tbl1() As Byte
Dim Tbl2() As Byte
Tbl1 = Tbl1 + Tbl2, ----
[code.aspx?ID=41455 By Renfield]

Est il possible d'obtenir ce "résultat" simplement (avec une API ou autre). faire en sorte que le Tbl1 garde sont contenu et y ajoute à la fin le contenu de Tbl2. et ce sans avoir à passer par de Redim Preserve ou Ubound....
J'ai vu du CopyMermory mais je ne pense que cela reponde à mes besoins.

Si quelqu'un pouvait me mettre sur le chemin, ca serait cool.
D'avance merci.
@+: Ju£i?n
En attendant, Google is myfriend

7 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
39
A ma connaissance non, il n'existe as de fonction permettant de concatener un tableau.

A la limite CopyMemory pourrait t'éviter la boucle de copie, mais il faudra tout de même faire un Redim auparavent

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Redim obligatoire, de par la nature d'un tableau : "'Ensemble d'elements contigüs en mémoire"

donc pour en coller deux, il faut agrandir le premier, et recopier le contenu du deuxieme a la suite.

CopyMemory est donc clairement ton ami ici.

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Euh...
Bonjour Julien...
Les concaténations de tableaux ?
Pourquoi pas ? (avec une boucle, forcément) ...

Mais voyons donc : concaténation "horizontale", "verticale", ou en "ajout d'éléments" sans modifier le nombre de colonnes" ?
car ce serait bien évidemment différent ...

Je m'explique par 2 exemples :
1)
 tabl1 d'une colonne
 tabl2 d'une colonne
 tabltotal de 2 colonnes

et

2)
 tabl1 d'une colonne et 3 éléments
 tabl2 d'une colonne et 5 éléments
 tabltotal d'une colonne et 8 éléments


ls cas 1) et 2) ne seraient évidemment pas les mêmes ...


quelle est donc la "concaténation" qui t'intéresse, de ces 2 types ?

 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
57
Re all[auteurdetail.aspx?ID= 615490 ]
Merci pour les réponses.
> [auteurdetail.aspx?ID=333139 casy]
,[auteurdetail.aspx?ID =2359 Renfield] je vais donc essayer de mettre mieux en pratique le CopyMemory.
>,[auteurdetail.aspx?ID=615490 jmfmarques] .celui qui m'intéresse est le cas 2) (sauf que ce n'est pas un troisième tableau mais le premier qui s'agrandit avec les éléments du second.
Aller je vais essayer cela.
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
57
Re,
Bon alors j'ai fait ceci qui semble répondre à mes attentes. Merci donc à [auteurdetail.aspx?ID= 333139 casy] , et à [auteurdetail.aspx?ID=2359 Renfield] .
Dim IndiceDepart As Integer
On Error Resume Next
   If UBound(My_TblBytes) = 0 Then
       IndiceDepart = 0
       On Error GoTo 0
   Else
       IndiceDepart = UBound(My_TblBytes) + 1
   End If
   ReDim Preserve My_TblBytes(IndiceDepart + UBound(BRecu))
   Call CopyMemory(My_TblBytes(IndiceDepart), BRecu(0), UBound(BRecu) + 1)

, ----
[code.aspx?ID=41455 By Renfield]
avec My_TblBytes, et BRecu des tableaux de Byte
Dernière petite question.
Ma "gestion" d'erreur n'est pas très "propre" à mon goût. y aurait il une meilleure facon de faire (c'est pour le cas où le tableau n'ai pas encore été dimensionné)

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
39
Pour ta gestion d'erreur, dans le cas ou le tableau n'est pas dimentionné, tu traite l'erreur puis tu annule la gestion d'erreur.

Par contre dans le cas ou le tableau est déjà dimentionné, ta gestion d'erreur est active jusqu'à la fin de la procedure.

C'est pas très logique. Soit tu la laisse active jusqu'à la fin dans tous les cas, soit tu l'arrete àprès le test dans tous les cas. A ce moment là déplacer le On Error Goto  après le End If

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Casy a raison..

J'opteraio pour ne pas rester "englué" avec un "on error resume next" et choisirais un goto, mais très "rapproché" popur faciliter les lectures suivantes ..
Genre :

Private Sub Command1_Click()
  Dim toto() ' pas dimensionné, donc
  On Error GoTo 1
  ret = UBound(toto)
  GoTo 2
1:
  MsgBox "pas dimensionné ! "  ' à supprimer dans ton code, bien sur
  ReDim toto(0) ' on le dimensionne donc à 0
2:
   MsgBox UBound(toto) ' à supprimer  dans ton code, bien sur
  '  tu continues
End Sub