Trier des données dans un tableau en VBS ----- Contrairement au C par exemple, vbs n'a pas de fonction de tri toute faite...
Comme je me suis cassé la tête plusieurs jours sur ce problème je m'empresse d'en faire profiter les copains en espérant que ma démarche leur évitera de vider un autre tube d'aspirine.
D'abord je rends à César... ce lien qui m'a permis de m'en sortir:
http://www.vbfrance.com/forum/sujet-VBSCRIPT-TRI-TABLEAU-CAHINE-CARACTERE_839375.aspx#9
Mais n'hésitez pas à prendre un papier et un crayon pour commencer à élaborer une approche avec un tableau à 2, puis trois valeurs.
Si vous êtes une buse comme moi, ne cherchez pas la révélation le premier soir, allez vous occuper de votre copine et laissez mijoter toute la nuit (l'apprentissage, pas la copine....)
Enfin je vous livre ma version de base avec un output qui se veut pédagogique (en toute modestie car je l'ai écrit pour comprendre déjà moi-même, au départ). Si votre IDE pour le scripting n'accepte pas d'ouvrir deux sessions simultanées, copiez-collez l'output dans le bloc-notes pour avoir les deux fenêtres ouvertes côte à côte.
Mon code est prévu pour ranger, à terme, des dossiers par taille et dans l'ordre décroissant. Ici mon script pédagogique de base se contente de ranger les premiers nombres de la comptine placés au départ dans l'ordre croissant (1,2,3,4 .... ). Naturellement on peut augmenter à loisir le nombre d'éléments et changer l'ordre original.
'---------Code vbs
Dim tableauA(4) ' déclaration et remplissage du tableau
tableauA(0)=1
tableauA(1)=2
tableauA(2)=3
tableauA(3)=4
tableauA(4)=5
'-------- fin du code vbs
Le principe de la fonction est simple: Pour ranger les valeurs il faut une boucle principale et une autre imbriquée. Il faut comparer chacune des valeurs du tableau à toutes les valeurs qui la suivent pour déterminer la place de la valeur testée. On peut traduire comme ça:
------------------------------------------------------------------------------------------------------------------------------------------------
Boucle1 teste la valeur à mettre dans tableau(0)==> la première valeur est comparée à toutes celles qui la suivent dans l'ordre de départ (non rangé)
Boucle2 teste tableau(1) par rapport à tableau(0) ==> si tableau(1) < tableau(0), on inverse les valeurs dans les cases correspondantes du tableau
Boucle2 teste tableau(2) par rapport à tableau(0)
.... etc.
Boucle2 teste la valeur à mettre dans tableau(1)
Boucle2 teste tableau(2) par rapport à tableau(1)
Boucle2 teste tableau(3) par rapport à tableau(1)
.... etc.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
La variable temp sert de tampon pour garder en mémoire la valeur initiale de la case testée. En effet on ne peut pas inverser les 2 valeurs directement :
a = 2 , b = 3
a = b (donne a = 3)
b = a (donne b = 3)
résulat: a = b = 3 - no good !
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Je pense que l'output issu d'une version "pédagogique" du script devrait vous aider à émerger assez rapidement. Je le reproduis ici près du code de la fonction principale:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
UBound du tableau : 4
tableauA(0) 1
tableauA(1) 2
tableauA(2) 3
tableauA(3) 4
tableauA(4) 5
Test pour savoir la valeur à mettre dans tableau(0)
>> Ici agit la fonction ci-dessous
tableauA(0)<tableauA(1)
+++
tableauA(0) 2
tableauA(1) 1
tableauA(2) 3
tableauA(3) 4
tableauA(4) 5
+++
tableauA(0)<tableauA(2)
+++
tableauA(0) 3
tableauA(1) 1
tableauA(2) 2
tableauA(3) 4
tableauA(4) 5
+++
tableauA(0)<tableauA(3)
+++
tableauA(0) 4
tableauA(1) 1
tableauA(2) 2
tableauA(3) 3
tableauA(4) 5
+++
tableauA(0)<tableauA(4)
+++
tableauA(0) 5
tableauA(1) 1
tableauA(2) 2
tableauA(3) 3
tableauA(4) 4
+++
tableauA(0) 5
tableauA(1) 1
tableauA(2) 2
tableauA(3) 3
tableauA(4) 4
Test pour savoir la valeur à mettre dans tableau(1) >>
Ici agit la fonction ci-dessus
tableauA(1)<tableauA(2)
+++
tableauA(0) 5
tableauA(1) 2
tableauA(2) 1
tableauA(3) 3
tableauA(4) 4
+++
tableauA(1)<tableauA(3)
+++
tableauA(0) 5
tableauA(1) 3
tableauA(2) 1
tableauA(3) 2
tableauA(4) 4
+++
tableauA(1)<tableauA(4)
+++
tableauA(0) 5
tableauA(1) 4
tableauA(2) 1
tableauA(3) 2
tableauA(4) 3
+++
tableauA(0) 5
tableauA(1) 4
tableauA(2) 1
tableauA(3) 2
tableauA(4) 3
Test pour savoir la valeur à mettre dans tableau(2) >>
Ici agit la fonction ci-dessus
tableauA(2)<tableauA(3)
+++
tableauA(0) 5
tableauA(1) 4
tableauA(2) 2
tableauA(3) 1
tableauA(4) 3
+++
tableauA(2)<tableauA(4)
+++
tableauA(0) 5
tableauA(1) 4
tableauA(2) 3
tableauA(3) 1
tableauA(4) 2
+++
tableauA(0) 5
tableauA(1) 4
tableauA(2) 3
tableauA(3) 1
tableauA(4) 2
Test pour savoir la valeur à mettre dans tableau(3) >>
Ici agit la fonction ci-dessus
tableauA(3)<tableauA(4)
+++
tableauA(0) 5
tableauA(1) 4
tableauA(2) 3
tableauA(3) 2
tableauA(4) 1
+++
tableauA(0) 5
tableauA(1) 4
tableauA(2) 3
tableauA(3) 2
tableauA(4) 1
Test pour savoir la valeur à mettre dans tableau(4) >>
Ici agit la fonction ci-dessus
tableauA(0) 5
tableauA(1) 4
tableauA(2) 3
tableauA(3) 2
tableauA(4) 1
FINAL :
tableauA(0) 5
tableauA(1) 4
tableauA(2) 3
tableauA(3) 2
tableauA(4) 1
Exit code: 0 , 0000h
---------------------------------------------------------------------------------- Page suivante >> ----------------------------------------------------------
-- mise à jour compteur: 1/6/2009