Variables escalares y de matriz

En la mayoría de los casos, una vez que haya declarado una variable, solo le asignará un valor único. Una variable que contiene un solo valor es una variable escalar. Otras veces, es conveniente asignar más de un valor relacionado a una única variable. Puede crear una variable que pueda contener una serie de valores. Esto es una variable de matriz. Las variables escalares y de matriz se declaran de la misma forma, con la excepción de que la declaración de una variable de matriz utiliza paréntesis ( ) a continuación del nombre de la variable.

En el siguiente ejemplo, se declara una matriz unidimensional que contiene 11 elementos:

Dim A(10)

Aunque el número que se muestra entre paréntesis es 10, todas las matrices de BSL tienen una base cero. Por lo tanto, esta matriz contiene 11 elementos. En una matriz con base cero, el número de elementos de la matriz es siempre el número que se muestra entre paréntesis más uno. Este tipo de matriz se denomina matriz de tamaño fijo.

Puede asignar datos a cada uno de los elementos de la matriz mediante un índice en la matriz. A partir de cero y hasta el 10, se puede asignar datos a los elementos de una matriz de la siguiente manera:

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

Del mismo modo, los datos se pueden recuperar de cualquier elemento mediante un índice en el elemento de matriz que desee.

Por ejemplo:

SomeVariable = A(8)

Las matrices no se limitan a una sola dimensión. Para declarar varias dimensiones, separe los números de tamaño de una matriz entre paréntesis con comas. En el siguiente ejemplo, la variable MyTable es una matriz bidimensional que consta de 6 filas y 11 columnas:

Dim MyTable(5,10)

En una matriz bidimensional, el primer número es siempre el número de filas; el segundo número es el número de columnas.

También puede declarar una matriz cuyo tamaño cambie durante el tiempo que se ejecuta el script. Esto se denomina matriz dinámica. La matriz se declara inicialmente dentro de un procedimiento mediante la sentencia Dim o la sentencia ReDim. Sin embargo, para una matriz dinámica, no se coloca ningún tamaño ni número de dimensiones dentro de los paréntesis.

Por ejemplo:

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

Para utilizar una matriz dinámica, debe utilizar posteriormente ReDim para determinar el número de dimensiones y el tamaño de cada dimensión. En el siguiente ejemplo, ReDim define el tamaño inicial de la matriz dinámica en 25. Una sentencia ReDim posterior cambia el tamaño de la matriz a 30, pero utiliza la palabra clave Preserve para conservar el contenido de la matriz a medida que se realiza el cambio de tamaño.

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

No hay límite en el número de veces que se puede cambiar el tamaño de una matriz dinámica, aunque si se hace una matriz más pequeña, se pierden los datos de los elementos eliminados.

En los siguientes ejemplos se muestra el uso de variables escalares y variables de matriz:

Ejemplo 1:

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

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

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

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