Array

Résolu
Larwin Messages postés 44 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 24 juillet 2010 - 2 nov. 2007 à 01:12
Larwin Messages postés 44 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 24 juillet 2010 - 2 nov. 2007 à 17:06
bonjour tout le monde
juste une petite question, tout ca ne me semble pas bien compliqué mais je ne trouve pas une fonction dans le framework qui le fasse de maniere automatique....

j'explique le truc.
j'ai un tableau a deux dimensions de ce type la
montab(0,0) = "je"
montab(0,1) = "n'y"
montab(0,2) = "arrive"
montab(0,3) = "pas..."

j'aimerai savoir s'il y'a une fonction du style array.qqch ou convert.qqch pour récupérer "une seul dimension du tableau" pour avoir un truc final du genre

mondiftab(0) = "je"
mondiftab(1) = "n'y"
mondiftab(2) = "arrive"
mondiftab(3) = "pas..."

j'aimerais faire ca sans do loop ou encore for next car le tableau a deux dimensions peut etre parfois assez volumineux... y'a bien un truc qui doit exister non ?

Merci d'avance a tous !

6 réponses

Larwin Messages postés 44 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 24 juillet 2010
2 nov. 2007 à 17:06
Merci tout le monde... je n'ai pas trouvé non plus de solution dans le framework, alors voila je fais une boucle... je vous met le code ici, merci tout de meme !



Public



Shared



Function
GetUnidimensionnalStringArray(

ByVal
GetRowsArray(,)

As



Object
)

As



String
()




Dim
Counter

As



Integer
= 0




Dim
ReturnObjectArray(GetRowsArray.LongLength - 1)

As



String








      For
y

As



Long
= 0

To
GetRowsArray.GetUpperBound(1)


         For
x

As



Long
= 0

To
GetRowsArray.GetUpperBound(0)         ReturnObjectArray(Counter) = GetRowsArray(x, y)

         Counter += 1


         Next






      Next






Return
ReturnObjectArray


End



Function
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 nov. 2007 à 11:26
une boucle...  et recopie du tableau

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
mstarsup5 Messages postés 527 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 10 octobre 2013 1
2 nov. 2007 à 11:55
Je crois que sa question était justement de savoir si c'était faisable avec une commande, sans boucle :)
(Peut être plus rapide s'il y a une commande faite pour, je ne sais pas)
Mais j'ai cherché un peu sur le net, pas trouvé de telle commande, donc la boucle semble s'imposer en effet :)
0
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
2 nov. 2007 à 13:33
J'ai essaie de voir l'intérêt de faire ça sans boucle, "mais je n'y arrive pas" ;-)
Un redim preserve montab(0 to 3) ?
Mais même si ça marchait, le nom de variable ne serait pas modifié.
Désolé, pas d'idée.

La haine aveugle n'est pas sourde
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 nov. 2007 à 13:36
tu ne peux pas changer via redim le nombre de colonnes, ni le nombre de dimension...

je sais plus comment les données sont rangées en mémoire sous VB, ca doit etre possible de faire un simple CopyMemory pour récupérer en contigu toutes les données d'une 'ligne'... a voir

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
2 nov. 2007 à 15:21
salut,
A noter que , si c' est pas un oubli de ta part,
ton tableau , tel que tu le décris, est à quatre dimensions.


@Renfield
A noter aussi que le CopyMemory lui évitera seulement de faire
une imbrication pour les colonnes.


Voici (à peu près tel quel) un bout de code que j' ai déniché.
  
    rmin = CInt(txtMinRow.Text) 'la plus petie valeur, je crois
    rmax = CInt(txtMaxRow.Text) 'la plus grande valeur , je crois
    bytes_per_col = rmax - rmin + 1
    idx = 0
For c = cmin To cmax
        CopyMemory mondiftab(idx),montab(rmin, c), _
            bytes_per_col
        idx = idx + bytes_per_col
Next c


Désolé de vous livrer ça comme tel et sans plus d' explication.
C' est pas dans mes habitudes de faire des Copier/Coller.







<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
0
Rejoignez-nous