Sentencia DIMENSION

Sintaxis

DIM[ENSION] matriz (filas, columnas) [ , matriz (filas, columnas) ...]
DIM[ENSION] vector (subíndice) [ , vector (subíndice) ...]

Descripción

Utilice la sentencia DIMENSION para definir las dimensiones de una variable de matriz antes de hacer referencia a la matriz en el programa. Para una matriz (una matriz bidimensional), utilice la sentencia DIMENSION para establecer el número máximo de filas y columnas disponibles para los elementos de la matriz. Para un vector (una matriz unidimensional), utilice la sentencia DIMENSION para establecer el valor máximo del subíndice (el número máximo de elementos) de la matriz.

Los valores de matriz y vector pueden ser cualquier nombre de variable válido. La dimensión máxima puede ser cualquier expresión numérica válida. Al especificar las dos dimensiones de una matriz, debe emplear una coma para separar las expresiones de fila y columna. Estas expresiones se denominan índices.

Puede utilizar una sola sentencia DIMENSION para definir varias matrices. Si define más de una matriz con una sentencia DIMENSION, debe utilizar comas para separar las definiciones de matriz.

La sentencia DIMENSION declara únicamente el nombre y el tamaño de la matriz. No asigna valores a los elementos de la matriz. La asignación de valores a los elementos se realiza con la sentencia MAT, la sentencia MATPARSE, las sentencias MATREAD, la sentencia MATREADU y las sentencias de asignación.

La sentencia DIMENSION en una cuenta de tipo IDEAL o INFORMATION se ejecuta en tiempo de ejecución. La ventaja de la manera en que InfoSphere DataStage maneja esta sentencia consiste en que la cantidad de memoria asignada no se determina hasta que se ejecuta la sentencia DIM. Esto significa que las matrices se pueden volver a dimensionar en tiempo de ejecución.

Al volver a dimensionar una matriz, puede cambiar el número máximo de elementos, filas, columnas o cualquier combinación de ellos. Incluso puede modificar la dimensionalidad de una matriz (es decir, transformar una matriz unidimensional en bidimensional, o a la inversa).

El hecho de volver a dimensionar una matriz afecta a los valores de los elementos de matriz tal como se indica a continuación:

La sentencia DIMENSION falla si no hay suficiente memoria disponible para la matriz. En ese caso, la función INMAT se establece en el valor 1.

Una variable de matriz pasada a una subrutina en su totalidad como argumento de una sentencia CALL no se puede volver a dimensionar en la subrutina. Cada matriz de una subrutina debe dimensionarse una vez. Las dimensiones declaradas en la sentencia DIMENSION de subrutina se omiten, no obstante, cuando se pasa una matriz a la subrutina como argumento (para obtener más información, consulte la sentencia CALL).

Tipos PICK, IN2 y REALITY

En las cuentas de tipo PICK, IN2 y REALITY, las matrices se crean en tiempo de compilación y no de ejecución. Las matrices no se pueden volver a dimensionar y no tienen un elemento cero. Para obtener las mismas características en una cuenta de tipo INFORMATION o IDEAL, utilice la opción STATIC.DIM de la sentencia $OPTIONS.

Ejemplos

DIM ARRAY(2,2)
ARRAY(1,1)="KK"
ARRAY(1,2)="GG"
ARRAY(2,1)="MM"
ARRAY(2,2)="NN"

En el ejemplo siguiente, se imprimen mensajes de aviso para los elementos no asignados de la matriz. Se asignan series vacías a los elementos como valores.

DIM ARRAY(2,3)
*
PRINT
FOR X=1 TO 2
   FOR Y=1 TO 3
      PRINT "ARRAY(":X:",":Y:")", ARRAY(X,Y)
   NEXT Y
NEXT X
DIM S(3,2)
S(1,1)=1
S(1,2)=2
S(2,1)=3
S(2,2)=4
S(3,1)=5
S(3,2)=6

En el ejemplo siguiente, se conservan los elementos comunes. Los elementos a los que no se puede hacer referencia en la matriz nueva (S(3,1), S(3,2)) se pierden.

DIM S(2,2)
*
PRINT
FOR X=1 TO 2
FOR Y=1 TO 2
PRINT "S(":X:",":Y:")", S(X,Y)
NEXT Y
NEXT X

Esta es la salida del programa:

ARRAY(1,1)         KK
ARRAY(1,2)         GG
ARRAY(1,3)         Program 'DYNAMIC.DIMENSION':
Line 12, Variable previously undefined, empty string 
used.

ARRAY(2,1)         MM
ARRAY(2,2)         NN
ARRAY(2,3)         Program 'DYNAMIC.DIMENSION':
Line 12, Variable previously undefined, empty string 
used.

S(1,1)   1
S(1,2)   2
S(2,1)   3
S(2,2)   4