[VBS] Redimensionner un tableau a plusieurs dimensions

Redimensionner un tableau a plusieurs dimensions [VBS] - VB/VBA/VBS - Programmation

Marsh Posté le 18-07-2005 à 18:44:31    

Bonjour,
 
La question a ete posee dans des posts precedents, mais j'avoue que j'ai encore quelques questions ...
 
But : Je souhaite augmenter la 1ere dimension d'un tableau a 2 dimensions
 
Contexte :
- le code est ecrit en VBScript.
- j'ai un tableau mon_tableau(10,5)
- je souhaite qu'il soit par exemple de taille (15,5)
 
Extrait de Code :

Dim mon_tableau() ' declaration d'un tableau dynamique
Redim mon_tableau(10,5)
[...]
Redim Preserve mon_tableau(15,5) ' provoque une erreur


 
Il y a une erreur car avec Preserve, on ne peut changer que la taille de la derniere dimension (cf MSDN).
 
Je dois donc faire une copie de mon_tableau quelque part (double boucle For), ReDimensionner mon_tableau, et refaire la copie des elements vers mon_tableau (double boucle For encore).
 
Question : Est-ce qu'il n'y aurait pas un moyen de passer par des pointeurs ou quelque chose de plus rapide ?
 
Bien sur, le code suivante provoque une erreur pour ceux qui auraient eu cette idee pour faire une copie de tableau (pointeurs a la C) :

Dim tab1(10,5), tab2(10,5)
 
tab1(1, 1) = "salut"
tab2(1, 1) = "aurevoir"
 
tab2 = tab1


 
Merci d'avance.
 
piloupy
 
PS : en realite, mon tableau peut atteindre plus de 1700 lignes (1ere dimension), et il est clair que la double copie des milliers d'elements en basic est un manque de performance assez genant.

Reply

Marsh Posté le 18-07-2005 à 18:44:31   

Reply

Marsh Posté le 18-07-2005 à 18:57:13    

pour la première, en chrechant un peu ..
 
http://forum.hardware.fr/hardwaref [...] 4092-1.htm
 
 
pour la seconde, si tu a 1700 lignes à ta première dimension, oublie le basic, ca va prendre un tps fou.


---------------
now : do nothing
Reply

Marsh Posté le 19-07-2005 à 15:54:25    

Je ne peux pas (ou ne sais pas) creer de nouveau type en VBScript. Ca aurait ete une bonne solution.
 
Est-ce que vous savez si c'est possible ?

Reply

Marsh Posté le 19-07-2005 à 15:58:10    

je sais pas si c possible, mais existe il une fonction de transposition de matrice su vb? si c le cas tu transposes,tu extend, et tu re transposes ta matrice

Reply

Marsh Posté le 19-07-2005 à 17:17:33    

Il n'existe pas de fonction de transposee. J'ai prefere au final faire une copie du tableau.
 
Voici le code :
 

Const TAILLE_COLONNE = 3
 
Sub extendUsersList(ByVal incr)
  localArray = usersList
  ligne = UBound(usersList)
  ReDim usersList(ligne + incr, TAILLE_COLONNE)
  For i = 0 To ligne
    For j = 0 To TAILLE_COLONNE
      usersList(i, j) = localArray(i, j)
    Next
  Next
End Sub
 
Public usersList()
ReDim usersList(50, TAILLE_COLONNE)
 
For i = 0 To 50
  For j = 0 To TAILLE_COLONNE
    usersList(i, j) = i & ", " & j
  Next
Next
 
Wscript.Echo "Dimensions de usersList : " & UBound(usersList, 1) & ", " & Ubound(usersList, 2)
 
extendUsersList(100)
 
For i = 0 To 50
  For j = 0 To TAILLE_COLONNE
    Wscript.Echo usersList(i, j)
  Next
Next
Wscript.Echo "Dimensions de usersList : " & UBound(usersList, 1) & ", " & Ubound(usersList, 2)


 
Et une partie de la sortie :
 

Dimensions de usersList : 50, 3
0, 0
0, 1
0, 2
0, 3
1, 0
1, 1
1, 2
1, 3
2, 0
[...]
48, 3
49, 0
49, 1
49, 2
49, 3
50, 0
50, 1
50, 2
50, 3
Dimensions de usersList : 150, 3


 
Cordialement,
 
piloupy

Reply

Marsh Posté le 17-10-2007 à 11:13:50    

Hello le monde,
ça fait plaisir de voir tout ce qui concerne les tab écrit en clair. J'ai eu le même problème pour la première dimension.
 
Dans la suite de ces questions, j'en ai une nouvelle :
Si on a un tableau de 10 valeurs et qu'on désire passer les valeurs n°3 à 6 vers un tableau2, comment le faire sans utilisé une boule qui prend du temps? :??:  
 
ps : je bosse sur vbscript
 
Merci

Reply

Marsh Posté le 20-07-2009 à 11:24:39    

Merci beaucoup pour ton sujet il m'a bien aidé :)
mitsh666, je ne comprends pas ta question :??:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed