Cada comando de declaração de array pode criar ou redimensionar arrays de uma ou duas dimensões. Exemplo:
ARRAY TEXT(atTemas;100;50)
Arrays de duas dimensões são essencialmente objetos de linguagem; não é possível visualizar nem imprimir este tipo de array.
No exemplo anterior:
- atTemas é um array de duas dimensões
- atTemas{8}{5} é o quinto elemento (quinta coluna...) da linha oito
- atTemas{20} é a linha 20 e um array de uma dimensão
- Size of Array(atTemas) retorna 100, que é o número de linhas
- Size of Array(atTemas{17}) retorna 50, que é o número de colunas da linha 17
No exemplo seguinte, um indicador a cada campo de cada tabela na base de dados é armazenado em um array de duas dimensões:
C_LONGINT($vlUltimaTabela;$vlUltimoCampo)
C_LONGINT($vlNumeroCampo)
$vlUltimaTabla:=Get last table number
ARRAY POINTER(<>apCampos;$vlUltimaTabla;0)
For($vlTabela;1;$vlUltimaTabela)
If(Is table number valid($vlTabela))
$vlUltimoCampo:=Get last field number($vlTabela)
$vlNumeroColuna:=0
For($vlCampo;1;$vlUltimoCampo)
If(Is field number valid($vlTabela;$vlCampo))
$vlNumeroColuna:=$vlNumeroColuna+1
INSERT IN ARRAY(<>apCampos{$vlTabla};$vlNumeroColuna;1)
<>apCampos{$vlTabela}{$vlNumeroColumna}:=Field($vlTabela;$vlCampo)
End if
End for
End if
End for
Dado que este array de duas dimensões foi inicializado, você pode obter os apontadores aos campos para uma tabela em particular da seguinte forma:
COPY ARRAY(<>apCampos{Tabele(Current form table)};$apCamposAtuais)
For($vlElemento;1;Size of array($pCamposAtuais))
Case of
:(Type($apCamposAtuais{$vlElemento}->)=Is date)
$apCamposAtuais{$vlElemento}->:=Current date
:(Type($apCamposAtuais{$vlElemento}->)=Is Boolean)
$apCamposAtuais{$vlElemento}->:=True
End case
End for
Nota: como este exemplo sugere, as linhas de um array de duas dimensões podem ter o mesmo tamanho, ou tamanhos diferentes