4D v16.3

Tableaux à deux dimensions

Accueil

 
4D v16.3
Tableaux à deux dimensions

Tableaux à deux dimensions  


 

 

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) ` Créer un tableau texte composé de 100 lignes de 50 colonnes

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)
  ` Créer autant de lignes (vides et sans colonnes) qu'il y a de tables
 $vlDerniereTable:=Get last table number
 ARRAY POINTER(<>apChamps;$vlDerniereTable;0) `Tableau 2D avec N lignes et zéro colonnes
  ` Pour chaque table
 For($vlTable;1;$vlDerniereTable)
    If(Is table number valid($vlTable))
       $vlDernierChamp:=Get last field number($vlTable)
  ` Donner la valeur des éléments
       $vlNumeroColonne:=0
       For($vlChamp;1;$vlDernierChamp)
          If(Is field number valid($vlTable;$vlChamp))
             $vlNumeroColonne:=$vlNumeroColonne+1
  `Insère une colonne dans la ligne de la table en cours
             INSERT IN ARRAY(<>apChamps{$vlTable};$vlNumeroColonne;1)
  `Affecte la "celulle" avec le pointeur
             <>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 :

  ` Obtenir les pointeurs vers les champs pour la table affichée à l'écran:
 COPY ARRAY(◊apChamps{Table(Current form table)};$apMesChampsdeTravail)
  ` Initialiser les champs booléens et date
 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.



Voir aussi  

Présentation des tableaux

 
PROPRIÉTÉS 

Produit : 4D
Thème : Tableaux

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)