Les Tableaux

De Wiki AutoIt Français
Aller à : navigation, rechercher

La conception / traduction de cette page est toujours en cours.

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).

Tableaux IMG1.png

Tableau 2D

Un tableau à plusieurs colonnes est appelé tableau 2D (deux dimensions).

Tableaux IMG2.png

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", ",")


Tableaux IMG3.png

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].

Tableaux IMG5.png

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().

Tableaux IMG6.png