Cada comando de declaración de array puede crear o redimensionar arrays de una o dos dimensiones. Ejemplo:
ARRAY TEXT(atTemas;100;50)
Los arrays de dos dimensiones son esencialmente objetos del lenguaje; no es posible visualizarlos o imprimirlos.
En el ejemplo anterior:
- atTemas es un array de dos dimensiones
- atTemas{8}{5} es el elemento 5 (columna 5...) de la fila 8
- atTemas{20} es la fila 20 y un array de una dimensión
- Size of Array(atTemas) devuelve 100, que es el número de filas
- Size of Array(atTemas{17}) devuelve 50, que es el número de columnas de la fila 17
En el siguiente ejemplo, un puntero a cada campo de cada tabla en la base se almacena en un array de dos dimensiones:
C_LONGINT($vlUltimaTabla;$vlUltimoCampo)
C_LONGINT($vlNumeroCampo)
$vlUltimaTabla:=Get last table number
ARRAY POINTER(<>apCampos;$vlUltimaTabla;0)
For($vlTabla;1;$vlUltimaTabla)
If(Is table number valid($vlTabla))
$vlUltimoCampo:=Get last field number($vlTabla)
$vlNumeroColumna:=0
For($vlCampo;1;$vlUltimoCampo)
If(Is field number valid($vlTabla;$vlCampo))
$vlNumeroColumna:=$vlNumeroColumna+1
INSERT IN ARRAY(<>apCampos{$vlTabla};$vlNumeroColumna;1)
<>apCampos{$vlTabla}{$vlNumeroColumna}:=Field($vlTabla;$vlCampo)
End if
End for
End if
End for
En la medida en que este array de dos dimensiones haya sido inicializado, puede obtener los punteros a los campos para una tabla particular de la siguiente forma:
COPY ARRAY(<>apCampos{Table(Current form table)};$apCamposActuales)
For($vlElemento;1;Size of array($apCamposActuales))
Case of
:(Type($apCamposActuales{$vlElemento}->)=Is date)
$apCamposActuales{$vlElemento}->:=Current date
:(Type($apCamposActuales{$vlElemento}->)=Is Boolean)
$apCamposActuales{$vlElemento}->:=True
End case
End for
Nota: como lo sugiere este ejemplo, las filas de un array de dos dimensiones pueden tener o no el mismo tamaño.