versión 6.0
Cada comando de declaración de array puede crear o redimensionar arrays de una o dos dimensiones. Ejemplo:
ARRAY TEXT (atTemas;100;50) ` Crear un array texto compuesto de 100 filas de 50 columnas
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)
` Crear tantas filas vacías como tablas
$vlUltimaTabla:=Get last table number
ARRAY POINTER (<>apCampos;$vlUltimaTabla;0) `Array de dos dimensiones con X lineas y 0 columnas
` Para cada tabla
For ($vlTabla;1;$vlUltimaTabla)
If(Is table number valid($vlTabla))
$vlUltimoCampo:=Get last field number($vlTabla)
` Definir los valores de los elementos
$vlNumeroColumna:=0
For ($vlCampo;1;$vlUltimoCampo)
If(Is field number valid($vlTabla;$vlCampo))
$vlNumeroColumna:=$vlNumeroColumna+1
`Inserte una columna en la línea de la tabla en uso
INSERT IN ARRAY(<>apCampos{$vlTabla};$vlNumeroColumna;1)
`Asigne la "celda" con el puntero
<>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:
` Obtener los punteros a los campos para la tabla en pantalla::
COPY ARRAY (<>apCampos{Table(Current form table)};$apCamposActuales)
` Inicializar los campos booleanos y fecha
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.
Ver también