Les Tableaux
La conception / traduction de cette page est toujours en cours.
Sommaire
- 1 Les Tableaux (Arrays)
- 2 Initialiser un tableau
- 3 Autres types d'initialisations
- 4 Effacer un tableau
- 5 Redimensionner un tableau
- 6 Obtenir les dimensions d'un tableau
- 7 Accès aux valeurs d'un tableau
- 8 Lecture continue des valeurs d'un tableau
- 9 "Array variable has incorrect number of subscripts or subscript dimension range exceeded."
Les Tableaux (Arrays)
Qu'est-ce qu'un tableau
Un tableau est une variable qui peux contenir plusieurs types valeurs (nombres, chaines de caractères ou tableaux). Ces valeurs sont classées sous forme de tableau à colonne(s) et ligne(s).
Tableau 1D
Un tableau à une seule colonne est appelé tableau 1D (une dimension).
Tableau 2D
Un tableau à plusieurs colonnes est appelé tableau 2D (deux dimensions).
Par convention, le nommage des variables tableau commence par la lettre "a" en minuscule. Ceci n'est pas une obligation, mais cela permet de savoir que l'on a affaire à une variable tableau.
$aMonTableau
Initialiser un tableau
Un tableau peut être initialisé comme n'importe quelle variable standard avec les commandes :
Dim, Const, Global, Local ou Static
Initialiser un tableau 1D
Un tableau 1D de 5 lignes peux être initialisé comme ceci :
Dim $aArray[5]
Ou si vous voulez remplir le tableau par avance :
Dim $aArray[5] = ["Valeur1", "Valeur2", "Valeur3", "Valeur4", "Valeur5"]
Initialiser un tableau 2D
Un tableau 2D de 5 lignes et 2 colonnes peux être initialisé comme ceci :
Dim $aArray[5][2]
Ou si vous voulez remplir le tableau par avance :
Dim $aArray[5][2] = [["Valeur 1", "Valeur 2"], ["Valeur 3", "Valeur 4"], ["Valeur 5", "Valeur 6"], ["Valeur 7", "Valeur 8"], ["Valeur 9", "Valeur 10"]]
Autres types d'initialisations
Duplication d'un tableau
Un tableau peux être dupliqué comme ceci :
$aArray2 = $aArray2
Certaines fonctions tel que StringSplit(), StringToASCIIArray(), DriveGetDrive(), etc ... retournent des valeurs sous forme de tableau, avec pour certaines fonctions, le nombre total d'éléments dans l'élément [0].
$aArray = StringSplit("Valeur 1,Valeur 2,Valeur 3,Valeur 4,Valeur 5", ",")
Un tableau ne peut pas dépasser 64 dimensions et/ou 16 millions d'éléments
Effacer un tableau
Pour effacer un tableau, il suffit de lui affecter une valeur nulle.
$aArray = ''
Redimensionner un tableau
Pour redimensionner un tableau, il suffit d'utiliser la fonction ReDim(). Celle-ci permet de conserver les valeurs existantes.
Si vous redimensionnez un tableau de 10 éléments en tableau à 5 éléments, les 5 dernières valeurs du tableau seront effacées.
Redim $aArray[10]
Obtenir les dimensions d'un tableau
Il existe deux méthodes pour obtenir les dimensions d'un tableau.
Dimensions d'un tableau 1D
Pour les tableaux retournés par la plupart des fonctions d'AutoIt (en dehors de quelques exceptions), vous pouvez utiliser la valeur contenue dans l'élément [0] du tableau.
$Dimension = $aArray[0]
L’inconvénient de cette méthode est que si le tableau a été redimensionné mais que l'élément [0] n'a pas été mis à jour, alors vous risquez de passer à coté de certaines valeurs.
Généralement, la méthode la plus utilisée fait appel à la fonction Ubound() qui retourne la totalité des éléments du tableau.
$Dimension = Ubound($aArray)
Dimensions d'un tableau 2D
Les dimensions d'un tableau 2D peuvent être récupérée comme ceci :
$Lignes = Ubound($aArray) ou $Ligne = Ubound($aArray, 1)
$Colonnes = Ubound($aArray, 2)
Dimensions d'un tableau à plus de 2 dimensions
Il est des cas ou certains ont besoin d'utiliser des tableaux à plus de deux dimensions.
Dans ce cas, il est possible de connaitre le nombre de dimensions comme ceci :
$Dimensions = Ubound($aArray, 0)
AutoIt permet d'aller jusqu'à 64 dimensions, mais ne perdez pas de vue qu'un tableau ne peux pas dépasser 16 millions d'éléments et que le calcul d'un tableau est basé sur la puissance de ses dimensions.
Nombre d'éléments = Dimension 1 ^ Dimension 2 ^ Dimension 3 ^ Etc ...
Bien que cela soit quelque peu ridicule, voici des dimensions qui dépassent les limites d'AutoIt :
Dim $aArray[4097][4096]
Dim $aArray[257][256][256]
Dim $aArray[17][16][16][16][16][16]
La plupart des gens qui souhaitent utiliser des tableaux à plus de deux dimensions, sont des gens qui veulent utiliser ce type de tableau pour y stocker un grand nombre de données. Il est d'usage de conseiller dans ce cas l'utilisation d'une simple base de donnée (fonctions prisent en charge nativement dans AutoIt), ce qui permettra un accès nettement plus rapide aux données et permettra un grand nombres d'opérations rendues bien plus compliquées voir impossible par l'utilisation de plusieurs dimensions.
N'oubliez pas que la valeur retournée par la fonction UBound() est plus grande de 1 par rapport à l'index du dernier élément !
Accès aux valeurs d'un tableau
Chaque case du tableau, peux contenir n'importe quel type de valeur (y compris un autre tableau, mais cela ne sera pas traité ici). Un tableau peux être comparé à un meuble à plusieurs tiroirs. Pour accéder à l'un des tiroirs, il suffit de connaitre les coordonnées ou il se trouve (colonne et ligne). Dans le cas d'un tableau 1D, la colonne est implicite puisqu'il n'y en a qu'une seule.
Une des notions fondamentale des tableaux est que celui-ci commence toujours par la ligne 0 et la colonne 0, ce qui décale la numérotation des éléments.
Ceci entraine très souvent des erreurs d'utilisation, car dans un tableau $aArray[5], la dernière valeur ce trouve dans l'élément $aArray[4].
Accès aux valeurs d'un tableau 1D
Pour accéder à l'une des valeurs d'un tableau 1D, il suffit d'utiliser la variable tableau suivie entre crochet du numéro de l'élément :
$aArray[1]
Accès aux valeurs d'un tableau 2D
Pour accéder à l'une des valeurs d'un tableau 2D, il suffit d'utiliser la variable tableau suivie entre crochet de la ligne puis de la colonne de l'élément :
$aArray[1][1]
Lecture continue des valeurs d'un tableau
Pour lire la totalité des valeurs d'un tableau, on utilise une boucle de lecture. Selon le type de tableau à lire, on utilise principalement deux types de boucles (il existe d'autres possibilités, mais nous allons voir les deux plus courantes).
For $i = 1 To X
Ce type de boucle est généralement utilisée pour lire les valeurs retournées par une fonction qui renvoi un tableau dont l'élément [0] contient le nombre d'éléments.
For $i = 1 To $aArray[0]
ConsoleWrite($aArray[$i] & @LF)
Next
Vous pouvez quand même utiliser ce type de boucle pour lire un tableau dont tous les éléments sont significatifs, mais vous devrez commencer la boucle à l'élément 0 et penser que Ubound() vous renvoi une valeur supérieure de 1 par rapport à l'indexe du dernier élément.
For $i = 0 To Ubound($aArray) - 1
ConsoleWrite($aArray[$i] & @LF)
Next
For $i In $aArray
Si vous devez lire un tableau dont tous les éléments sont significatif, préférez cette méthode, car elle vous dispence de la recherche du nombre d'éléments.
For $Var In $aArray
ConsoleWrite($Var & @LF)
Next
"Array variable has incorrect number of subscripts or subscript dimension range exceeded."
Un message d'erreur du type : "Array variable has incorrect number of subscripts or subscript dimension range exceeded." signifie tout simplement que vous essayez d'accéder à une valeur du tableau qui n'existe pas. Généralement, cela est dût à une erreur liée à l'indexe du tableau car on a oublié de retirer 1 de la valeur retournée par Ubound().