Chaque commande de déclaration de tableau permet de créer ou de redimensionner des tableaux à une ou à deux dimensions. Exemple :
ARRAY TEXT(atTopics;100;50)
Les tableaux à deux dimensions sont essentiellement des objets de langage ; vous ne pouvez ni les afficher ni les imprimer.
Dans l'exemple prédédent :
- atTopics est un tableau à deux dimensions.
- atTopics{8} {5} est le 5e élément (5e colonne...) de la 8e ligne.
- atTopics{20} est la 20e ligne et est elle-même un tableau à une dimension.
- Size of array(atTopics) retourne 100, qui est le nombre de lignes
- Size of array(atTopics{17}) retourne 50, qui est le nombre de colonnes de la 17e ligne
Dans l'exemple suivant, un pointeur vers chaque champ de chaque table de la base est stocké dans un tableau à deux dimensions :
C_LONGINT($vlDerniereTable;$vlDernierChamp)
C_LONGINT($vlNumeroChamp)
$vlDerniereTable:=Get last table number
ARRAY POINTER(<>apChamps;$vlDerniereTable;0)
For($vlTable;1;$vlDerniereTable)
If(Is table number valid($vlTable))
$vlDernierChamp:=Get last field number($vlTable)
$vlNumeroColonne:=0
For($vlChamp;1;$vlDernierChamp)
If(Is field number valid($vlTable;$vlChamp))
$vlNumeroColonne:=$vlNumeroColonne+1
INSERT IN ARRAY(<>apChamps{$vlTable};$vlNumeroColonne;1)
<>apChamps{$vlTable}{$vlNumeroColonne}:=Field($vlTable;$vlChamp)
End if
End for
End if
End for
Dans la mesure où le tableau à deux dimensions a été initialisé, vous pouvez obtenir ainsi les pointeurs vers les champs d'une table de votre choix :
COPY ARRAY(◊apChamps{Table(Current form table)};$apMesChampsdeTravail)
For($vlElem;1;Size of array($apMesChampsdeTravail))
Case of
:(Type($apMesChampsdeTravail{$vlElem}->)=Is Date)
$apMesChampsdeTravail{$vlElem}->:=Current date
:(Type($apMesChampsdeTravail{$vlElem}->)=Is Boolean)
$apMesChampsdeTravail{$vlElem}->:=True
End case
End for
Note : Comme le montre cet exemple, les lignes des tableaux à deux dimensions peuvent être ou non de la même taille, indifféremment.