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