| DIM RECORD | commande |
Syntaxe : DIM RECORD nomRecord
DIM declaration1 [,declaration2...] [DIM declaration3 [,declaration4...]] : DIM END RECORD identificateurRec declaration peut avoir l’une des formes suivantes :
identificateur[typeSuffixe][;statExpr]
[longueurMax] identificateur$ [;statExpr] identificateur AS {typePredefini|typeUtilisateur}[;statExpr] identificateur.constante [;statExpr] {% | & | && | &&&}
Révision : Juillet 2000 (Release 3)
Description : La commande DIM RECORD indique le début d’un bloc de définition d’un “pseudo-record” (par comparaison avec la définition d’un “vrai record”, qui, lui, est déclarée au moyen d’un bloc BEGIN RECORD…END RECORD). Comme montré dans la description de la syntaxe, le bloc doit contenir des commandes DIM, et doit se terminer par une commande DIM END RECORD. Le bloc de définition d’un “pseudo record” demande au compilateur de générer une nouvelle constante symbolique entière pour chaque identificateur, et pour identificateurRec.
Par exemple, le bloc suivant : DIM RECORD monRecord
DIM premierChamp% DIM 5 secondChamp$ DIM troisiemeChamp& DIM quatriemeChamp.10 DIM END RECORD .maTailleRecord est exactement équivalant aux commandes ci-dessous :
_premierChamp = 0
_secondChamp = 2 _troisiemeChamp = 8 _quatriemeChamp = 12 _maTailleRecord = 22 Pour cette raison, chaque identificateur et identificateurRec, doivent avoir un nom qui diffère de celui de n’importe quelle autre constante symbolique définie ailleurs dans votre programme, et ce nom doit être différent également de celui de n’importe quelle autre constante symbolique prédéfinie par FB^3. Ceci implique aussi qu’aucun nom pour identificateur et pour identificateurRec dans un bloc DIM RECORD ne peut avoir le même que celui d’un identificateur ou d’un identificateurRec d’un autre bloc DIM RECORD.
Après que ces constantes symboliques ont été générées, vous pouvez utiliser la constante identificateurRec pour déclarer une variable de ce type de “pseudo record”. En poursuivant l’exemple ci-dessus, vous pourriez écrire les lignes qui suivent, n’importe où dans votre programme après le bloc DIM RECORD : DIM unRecord.maTailleRecord
Ceci réserve 22 octets pour la variable “unRecord”, et équivaut exactement à la déclaration suivante :
DIM unRecord.22
Vous pouvez alors imaginer cette zone de 22 octets comme étant divisée en quatre “champs” :
Remarquez que les quatre premières constantes symboliques générées par le bloc DIM RECORD représentent les valeurs du décalage en octets de ces champs par rapport au début du record. Cela signifie que vous pouvez utiliser la syntaxe du “point imbriqué” avec ces constantes pour accéder aux champs individuellement à l’intérieur du pseudo record.(voir Annexe B: Variables, pour en savoir plus au sujet de la syntaxe du “point imbriqué”. Par exemple : PRINT unRecord.troisiemeChamp&
Cette instruction demande à FB^3 d’afficher l’entier long qui est localisé 8 octets après le début de unRecord. Notez que, vous pourriez aussi bien écrire l’instruction suivante :
PRINT unRecord.8&
Cependant, l’utilisation des noms de constantes symboliques rend généralement votre code plus facile à lire et à maintenir.
Utilisation des déclarateurs d’alignement (%, &, &&, &&&) Les déclarateurs d’alignement sont utilisés de la même manière que dans une commande DIM “régulière”. L’utilisation de déclarateur d’alignement provoquera la chose suivante : la constante symbolique générée après la déclaration d’identificateur ou identificateurRec prendra une valeur divisible par 2, 4, 8 ou 16. Par exemple : DIM RECORD monRec
DIM abc.9 DIM n% DIM &, xyz% DIM END RECORD .tailleRec Le déclarateur “&” oblige la constante _xyz à avoir une valeur qui est divisible par 4. Les constantes sont générées avec les valeurs suivantes :
_abc = 0
_n = 9 _xyz = 12 _tailleRec = 14 Utilisation de la syntaxe point-virgule (;) La syntaxe point-virgule est utilisée de la même manière que dans une commande DIM “régulière”. L’utilisation d’une déclaration de la forme DIM var1; constante, var2 oblige var1 et var2 à générer des constantes symboliques dont la différence des valeurs est de constante. Par exemple : DIM RECORD monRec
DIM 5 leNom$ DIM leRect;0 DIM pt1.4 DIM pt2.4 DIM END RECORD .tailleRec Ce bloc force la génération des constantes suivantes :
_leNom = 0
_leRect = 6 _pt1 = 6 _pt2 = 10 _tailleRec = 14 Utilisation du caractère de soulignement avec identificateurRec Si identificateurRec commence par un caractère de soulignement plutôt que par un point; alors en plus de la génération des nouvelles constantes symboliques, FB^3 réserve aussi un espace de stockage pour une variable unique du type de ce pseudo record (dont le nom est spécifié par le paramètre nomRecord), ainsi qu’une variable pour chacun des champs. De plus, les variables des champs sont allouées dans l’espace de stockage de la variable record. Par exemple, ce bloc : DIM RECORD monRecord
DIM premierChamp% DIM 5 secondChamp$ DIM troisiemeChamp& DIM quatriemeChamp.10 DIM END RECORD _maTailleRec est exactement équivalant aux commandes suivantes :
_premierChamp = 0
_secondChamp = 2 _troisiemeChamp = 8 _quatriemeChamp = 12 _myRecSize = 22 DIM monRecord.maTailleRec;0 DIM premierChamp%, 5 secondChamp$ DIM troisiemeChamp&, quatriemeChamp.10 Dans ce cas, tandis que les constantes symboliques ont une portée globale, la portée des variables déclarées dépend de l’endroit où le bloc DIM RECORD apparaît dans votre programme.
Voir Aussi : |