Variables scalaires et de tableau

Dans la plupart des cas, une fois que vous avez déclaré une variable, vous ne lui affectez qu'une seule valeur. Une variable contenant une seule valeur est une variable scalaire. Parfois, l'affectation de plusieurs valeurs connexes à une seule variable peut être utile. Vous pouvez créer une variable qui peut contenir une série de valeurs. Il s'agit d'une variable de tableau. Les variables de tableau et les variables scalaires sont déclarées de la même manière, sauf que la déclaration d'une variable de tableau utilise des parenthèses ( ) après le nom de la variable.

Dans l'exemple suivant, un tableau unidimensionnel contenant 11 éléments est déclaré :

Dim A(10)

Bien que le nombre figurant entre les parenthèses soit 10, tous les tableaux dans le langage BSL sont de base zéro. Ce tableau contient donc 11 éléments. Dans un tableau de base zéro, le nombre d'éléments de tableau est toujours le nombre indiqué entre parenthèses plus un. Ce type de tableau est appelé tableau de taille fixe.

Vous pouvez affecter des données à chacun des éléments du tableau en utilisant un index dans le tableau. Des données peuvent être affectées aux éléments d'un tableau, en commençant à zéro et en allant jusqu'à 10, comme suit :

     A(0) = 256
        A(1) = 324
        A(2) = 100
         . . .
        A(10) = 55

De même, les données peuvent être extraites de n'importe quel élément à l'aide d'un index dans l'élément de tableau souhaité.

Par exemple :

SomeVariable = A(8)

Les tableaux ne sont pas limités à une seule dimension. Vous pouvez déclarer plusieurs dimensions en utilisant des parenthèses et en séparant par des virgules les nombres correspondant à la taille d'un tableau. Dans l'exemple suivant, la variable MyTable est un tableau bidimensionnel composé de 6 lignes et 11 colonnes :

Dim MyTable(5,10)

Dans un tableau bidimensionnel, le premier nombre correspond toujours au nombre de lignes et le second au nombre de colonnes.

Vous pouvez également déclarer un tableau dont la taille change pendant l'exécution du script. Il s'agit d'un tableau dynamique. Le tableau est initialement déclaré dans une procédure à l'aide de l'instruction Dim ou de l'instruction ReDim. Toutefois, pour un tableau dynamique, aucune taille ni aucun nombre de dimensions n'est placé entre les parenthèses.

Par exemple :

Dim MyArray()
ReDim AnotherArray() ' Illegal as no dimension specified
ReDim AnotherArray(3)

Pour utiliser un tableau dynamique, vous devez ensuite employer ReDim afin de déterminer le nombre de dimensions et la taille de chaque dimension. Dans l'exemple suivant, ReDim définit la taille initiale du tableau dynamique sur 25. Une instruction ReDim ultérieure redimensionne le tableau sur 30 mais utilise le mot-clé Preserve pour conserver le contenu du tableau lors du redimensionnement.

ReDim MyArray(25)
 . . . 
ReDim Preserve MyArray(30)

Le nombre de redimensionnements d'un tableau dynamique n'est pas limité. Toutefois, si vous réduisez un tableau, vous perdez les données des éléments éliminés.

Les exemples suivants illustrent l'utilisation des variables scalaires et de tableau :

Exemple 1 :

Dim B
B = 200   ' Assigns the value 200 to the variable B.

Exemple 2 :

Dim A(3)   ' Declares a single-dimension array with 4 elements 0 to 3 indexes.
' Assigning values to each element of the array.
A(0) = 256
A(1) = 324
A(2) = 100
' Retrieving a value from the array.
Dim SomeVariable
SomeVariable = A(1)   ' Retrieves the value at index 1.

Exemple 3 :

Dim MyArray()   ' Declares a dynamic array.
ReDim MyArray(25)   ' Sets the initial size of the dynamic array to 25 elements.
' Assigning values to the dynamic array.
MyArray(0) = "First"
MyArray(25) = "Last"
' Resizing the dynamic array and preserving contents.
ReDim Preserve MyArray(30)   ' Resizes the array to 30 elements and preserves existing data.

Exemple 4 :

Dim AnotherArray()
ReDim AnotherArray(10)   ' Initial size of 10 elements.
' Assigning values to the array.
AnotherArray(0) = "Alpha"
AnotherArray(10) = "Omega"

' Resizing the array multiple times.
ReDim Preserve AnotherArray(20)
AnotherArray(20) = "NewElement"
ReDim Preserve AnotherArray(5)   ' Reduces the size of the array (data beyond index 5 is lost).