Déclaration de variables en RPG-IV (spécif D) Détail : 7 à 21 : nom de zone, de tableau, de DS (indentation possible) le nom peut depasser la colonne 21 s'il est terminé par "..." et suivi d'une spécif D de définition avec 7-21 à blanc. 22 : E = DS externe 23 : type de DS S = système, U = associée à une data area 24-25 : type de définition ' ' = sous-zone de data structure 'DS' = data structure 'C ' = constante 'S ' = variable élémentaire ou tableau 'PR' = prototype (voir CALLP et fonctions) 26-32 : position de début (facultative) ou mot réservé pour SDS et INFDS (comme en GAP3) |
33-39 : position de fin ou longueur (peut être notée -nnnnn/+nnnnn avec le mot-clé LIKE) 40 : Type : A = caractère G = graphique (DBCS) T = heure Z = horodatage D = date P = packé B = binaire sur 4 chiffres (maxi = 9999) I = Integer : binaire sur 5 chiffres (maxi = 32767) ou 10. U = Unsigned : idem Integer, mais non signé (maxi = 65535) (V4R40) I et U sont acceptés de lg 3 (1 octet) et 20 (8 octets) S = numérique étendu * = pointeur (d'adresse ou de procédure) (V3R70) F = notation scientifique (virgule flotante) (V4R20) N = variable de type indicateur (booléenne) (V4R40) C = variable en UNICODE 41-42 : nbr de décimales [43 : réservé] 44-80 : mots-clés (occupants une à plusieurs lignes) |
exemples : DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++ DINFOCLI DS D nomcli 1 20 D adrcli 21 40 D vilcli 41 55 D cdpst 56 60 0 ou DINFOCLI DS D nomcli 20 D adrcli 20 D vilcli 15 D cdpst 5 0 DINFOCLI DS D nomcli 20 D adrcli 20 D vilcli 15 D cdpst 5 0 D departementclient... D 2 0OVERLAY(cdpst) D bdist 3 0OVERLAY(cdpst:3) |
Mots-clés zones : + OVERLAY(nom:pos): recouvrement d'une zone (DS admise en V4R2) alternative à l'écriture avec position de début (V4R40) + OVERLAY(nom-de-zone:*NEXT) permet de découper une variable d'une DS SANS figer les positions relatives à cette dernière exemple : D codepost 5 0 D dept 2 0 OVERLAY(codepost) D bdist 3 0 OVERLAY(codepost:*NEXT) dept redéfini codepost (sous entendu à partir de 1) bdist redéfini codepost (sous entendu à la suite de dept, soit 3) |
+ LIKE(nom) : définition d'une variable par rapport à une autre (lg peut être notée sous la forme + xxx) + CONST('constante') ou sous la forme 'constante' la constante peut occuper plusieurs lignes, utiliser alors la marque de continuation '+', toujours obligatoire en RPG-IV quand la coupure à lieu entre deux quotes(') . (V3R70) + ALTSEQ(*NONE) : ne pas tenir compte de la séquence de tri. + IMPORT : variable globale entre procédures elle est "possédée" par un autre pgm(cf EXPORT) + EXPORT : variable globale entre procédures (elle est "possédée" par ce pgm) un seul module peut déclarer une variable EXPORT il ne peut pas s'agir d'un paramètre reçu ou d'une variable basée sur un pointeur. |
pour pouvoir utiliser la variable il faut que le module la déclarant EXPORT soit actif ! + INZ(valeur) : valeur initiale Ce mot-clé peut-être utilisé au niveau zone, sous-zone ou DS. Toutes les fonctions intégrées peuvent être utilisées. - %size(), %addr(), ... Pour une DATE : *SYS représente la date système, *JOB la date du JOB Pour une Heure: *SYS représente l'horloge système INZ peut être utilisé sans argument, il s'agit alors de la valeur par défaut du type : |
- alpha = blanc - numérique = 0 - date = 01/01/40 ou 01/01/0001 - heure = 00:00:00 - horodatage = 0001-01-01-00.00.00.0000 (V4R40) + INZ(*EXTDFT) la valeur initiale pour cette zone est la valeur par défaut définie dans la base de données. + INZ(*USER) la valeur initiale pour cette zone est le profil utilisateur en cours. |
(V4R20) + VARYING : variable à longueur variable équivalent du mot-clé VARLEN en SDD la longueur réelle peut être retrouvée par : L = %len(nom) affectée par : %len(nom) = 20 ou %len(nom) = %len(%trimr(nom)) sinon l'affectation normale, eval nom = 'constante' ajuste la longueur si besoin. la variable commence en fait par deux octets binaires donnant la longueur reélle. |
Mots-clés Tableaux : + DIM(x) : définition d'un tableau (x = nb d'éléments) + ASCEND : ordre de tri croissant pour un tableau + DESCEND : ordre de tri décroissant pour un tableau + PERRCD(x) : indique, pour un tableau chargé à la compil ou à la pré-exécution le nombre de postes par enregistrement. + CTDATA : tableau chargé à la compilation le compilateur cherche une ligne source **CTDATA en fin de source + FROMFILE(dbf) : nom du fichier à lire pour un tableau chargé à la pré-exécution. + TOFILE(dbf) : indique le nom d'un fichier dans lequel écrire le contenu d'un tableau en fin de pgm. |
+ EXTFMT(f) : format externe de la variable pour un tableau chargé à la compile ou à la pré-exécution S numérique étendu <-- défaut P numérique packé B numérique binaire L/R numérique, signe en clair à Gauche/Droite + ALT(tableau) : le tableau associé à ce mot-clé est un tableau alterné, le tableau indiqué entre parenthèses est le tableau principal. DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++ DTBL1 S 2 DIM(25) CTDATA PERRCD(1) DTBL2 S 10 DIM(25) ALT(TBL1) les mots-clés CTDATA, PERRCD, FORMFILE, TOFILE ne peuvent être indiqués que sur le tableau principal. |
Il n'est pas possible d'indiquer DIM sur la DATA Structure elle même, mais DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++ DDS1 DS D TBL1 22 DIM(25) ASCEND D code 2 OVERLAY(TBL1) D lib 20 OVERLAY(TBL1:3) est admis. RPG-IV considère un tableau de 25 "code" et un tableau de 25 "lib" Ce qui permet ensuite C SORTA code qui tri la totalité de TBL1 en fonction du code. |
Mots-clés DS : + EXTNAME(dbf:fmt): nom du fichier(:format) pour une DS externe Si dbf n'est pas renseigné, alors fichier = nom de la DS + EXTFLD(nom-ext) : nom externe de la variable pour une DS externe. (il faut alors indiquer le nom interne en 7-21) + PACKEVEN : indique, pour une sous zone de data structure définie dans le pgm, que le nombre de chiffre est Pair.Par défaut le système considère dans une variable packée le nombre de chiffres maximum ,c'est à dire toujours impair.) + PREFIX(xxx) : idem PREFIX en spécif F, pour une DS externe. + DTAARA(nom) : nom de la data area (identique à *DTAARA DEFINE) Peut être associé à une zone élémentaire, une DS, une sous-zone de Data-Structure. Si nom n'est pas renseigné, alors data area = nom de la zone |
+ OCCURS(x) : DS à occurences multiples (x = nb d'occurences) Nouveautés : + BASED(nomptr) : variable adressée par un pointeur. le système ne lui réserve pas d'espace mémoire. la variable ne peut être manipulée que si le pointeur à un contenu valide. 'nomptr' est le nom du pointeur, quand sa valeur change, la structure pointe sur un autre espace mémoire. + PROCPTR : pointeur de procédure + TIMFMT(fmt>sep>): format d'une variable heure. + DATFMT(fmt<sep>): Format pour une variable de type date |
(V5R10) + QUALIFIED : les noms de sous-zone sont qualifés : nomDS.nomdezone ce qui permet d'avoir la même zone définie 2 fois (dans 2 DS différentes) ATTENTION, c'est considéré par RPG COMME DEUX CHAMPS DISTINCTS. Dds1 DS QUALIFIED D zone1 5 D zone2 3 + LIKEDS(nomDS) : définition d'une DS identique à une autre les deux DS sont automatiquement qualifiées. seule la structure de la DS est dupliquée. les mot-clés OCCUR, INZ, NOOPT ne le sont pas. vous pouvez préciser sur la deuxième DS : INZ(*likeds) |
Tableau croisé indiquant dans quel contexte un mot-clé est valide (par exemple BASED est valide avec une DS et une zone élémentaire) -------------------------------------------------------------------------- ! Tableau croisé type de donnée / mots-clés (X=supporté) ! !------------------------------------------------------------------------! ! ! Data ! sous-zone! sous-zone! zone ! ! ! mot-clé ! Structure ! de DS ! Externe !élémentaire! Constante! !--------------!-----------!----------!-----------!----------------------! ! ALT (1)! ! X ! X ! X ! ! ! ASCEND (1)! ! X ! X ! X ! ! ! BASED ! X ! ! ! X ! ! ! CONST ! ! ! ! ! X ! ! CTDATA (1)! ! X ! X ! X ! ! ! DATFMT ! ! X ! ! X ! ! ! DESCEND (1)! ! X ! X ! X ! ! ! DIM (1)! ! X ! X ! X ! ! ! DTAARA ! X ! X ! ! X ! ! ! EXPORT ! X ! ! ! X ! ! ! EXTFLD (2)! ! ! X ! ! ! ! EXTFMT (2)! ! X ! X ! X ! ! ! ! ! ! ! ! ! |
! ! Data ! sous-zone! sous-zone! zone ! ! ! mot-clé ! Structure ! de DS ! Externe !élémentaire! Constante! !--------------!-----------!----------!-----------!----------------------! ! EXTNAME (2)! X ! ! ! ! ! ! FROMFILE (1)! ! X ! X ! X ! ! ! IMPORT ! X ! ! ! X ! ! ! INZ ! X ! X ! X ! X ! ! ! LIKE ! ! X ! ! X ! ! ! LIKEDS ! X ! ! ! ! ! ! OCCURS ! X ! ! ! ! ! ! OVERLAY ! ! X ! ! ! ! ! PACKEVEN ! ! X ! ! ! ! ! PERRDC (1)! ! X ! X ! X ! ! ! PREFIX (2)! X ! ! ! ! ! ! PROCPTR ! ! X ! ! X ! ! ! QUALIFIED ! X ! ! ! ! ! ! TIMFMT ! ! X ! ! X ! ! ! TOFILE (1)! ! X ! X ! x ! ! ! VARYING ! ! X ! ! X ! ! ! -----------------------------------------------------------------------! (1) = pour un tableau.[DIM()] (2) = pour une DS Externe.[E en col 22] |