4D v16.3

Arrays de duas dimensões

Página Inicial

 
4D v16.3
Arrays de duas dimensões

Arrays de duas dimensões  


 

 

Cada comando de declaração de array pode criar ou redimensionar arrays de uma ou duas dimensões. Exemplo:

 ARRAY TEXT(atTemas;100;50) ` Criar um array de texto composto de 100 filas a 50 colunas

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)
  ` Criar tantas linhas (vazias e sem colunas) quanto as tabelas existentes
 $vlUltimaTabla:=Get last table number
 ARRAY POINTER(<>apCampos;$vlUltimaTabla;0) `Array de duas dimensões com X linhas e 0 colunas
  ` Para cada tabela
 For($vlTabela;1;$vlUltimaTabela)
    If(Is table number valid($vlTabela))
       $vlUltimoCampo:=Get last field number($vlTabela)
  ` Definir os valores dos elementos
       $vlNumeroColuna:=0
       For($vlCampo;1;$vlUltimoCampo)
          If(Is field number valid($vlTabela;$vlCampo))
             $vlNumeroColuna:=$vlNumeroColuna+1
  `Inserir uma coluna na linha da tabela em uso
             INSERT IN ARRAY(<>apCampos{$vlTabla};$vlNumeroColuna;1)
  `Aponte a "celula" com o ponteiro
             <>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:

  ` Obter os apontadores aos campos para a tabela atualmente mostrada na tela::
 COPY ARRAY(<>apCampos{Tabele(Current form table)};$apCamposAtuais)
  ` Inicializar os campos booleanos e de data
 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



Ver também 

Arrays

 
PROPRIEDADES 

Produto: 4D
Tema: Arrays

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)