
Mémo RPG-IV
Codes Opération Historiques (ne passent
pas le format libre)
voyez aussi le classement par genre
|
Code
|
Facteur 1
|
Facteur 2
|
Zone résultat
|
>>
|
<<
|
==
|
| ACQ (ACQUIRE pour unité ICF) |
nom-unité | Fichier Workstn | ER | |||
| ADD (ajout) | (origine) | val. ajoutée | Résultat | + | - | 0 |
| ANDxx | élément comparé | val. de comparaison | ||||
| BEGSR (début sous pgm) | nom-spgm | |||||
| CABxx (Comp and Branch) | élément comparé | val. de comparaison | label | |||
| CALL | pgm externe | |||||
| CALLB | procédure liée | |||||
| CASxx (Comp and SR) | élément comparé | val. de comparaison | sous-pgm | |||
| CAT (concaténation) | élément1 | élément2 [:nb esp] |
Résultat | |||
| CHECK (vérification -->) | car.autorisés | chaine à vérifier | position en erreur | ER | FD | |
| CHECKR (vérification <--) | car.autorisés | chaine à vérifier | position en erreur | ER | FD | |
| CLEAR (mise à blanc structure) | (*NOKEY) | zone/DS/format | ||||
| CLOSE | fichier | |||||
| COMMIT (validation) | (frontière | |||||
| COMP | élément comparé | val. de comparaison | > | < | = | |
| DEFINE (définition zone) | *LIKE | zone modèle | nouvelle zone | |||
| DEFINE (déclaration dtaara) | *DTAARA | nom externe | nom/pgm | |||
| DELETE | (clé) | format | ER | |||
| DIV (division) | (origine) | diviseur | Résultat | + | - | 0 |
| DOUXX (jusqu'à) | élément comparé | val. de comparaison | ||||
| DOWxx (tant que) | élément comparé | val. de comparaison | ||||
| DSPLY | (message) | file d'attente | (réponse) | |||
| ELSE | ||||||
| END, ENDIF, ENDDO,ENDSL,ENDCS |
||||||
| ENDSR (fin sous pgm) | label | |||||
| EXCEPT (spécif O) | nom-spécif O | |||||
| FEOD (force end of data) | fichier | |||||
| GOTO | label | |||||
| IFxx | élément comparé | val. de comparaison | ||||
| ITER (saut d'un tour de boucle) | ||||||
| IN (lecture) | (*LOCK) | data area | ||||
| KLIST (définition de clé) | nom-klist | |||||
| KFLD (zone d'une clé) | zone clé | |||||
| LEAVE (sortie anticipée) | ||||||
| LOOKUP (recherche dans tableau) |
recherche | tableau(,indice) | EQ | |||
| MOVE (cadrage à droite) | origine | Résultat | ||||
| MOVEA (zone dans tableau) | Origine | Résultat | ||||
| MOVEL (cadrage à gauche) | origine | Résultat | ||||
| MULT (multiplication) | (origine) | multiplicateur | Résultat | + | - | 0 |
| MVR (obtention du reste) | Résultat | + | - | 0 | ||
| OCCUR (DS à occurences) | (autre DS) | DS | (position) | |||
| OPEN | fichier | |||||
| ORXX | élément comparé | val. de comparaison | ||||
| OTHER (autre cas p. SELECT) | ||||||
| OUT (mise à jour) | (*LOCK) | data area | ||||
| PARM (définition paramètre) | val au retour | val à l'envoi | Paramètre | |||
| PLIST (liste de paramètre) | (*ENTRY) | |||||
| READ (accès séquentiel) | format (fichier) | ER | EOF | |||
| READC (lecture s/fichier) | format | ER | EOF | |||
| READE (séquentiel avec test) | clé | format (fichier) | ER | EOF | ||
| READP (séquentiel arrière) | format (fichier) | ER | BOF | |||
| READPE (arrière avec test) | clé | format (fichier) | ER | BOF | ||
| REL (RELEASE pour unité ICF) |
nom-unité | Fichier Workstn | ER | |||
| RESET (mise à état initial) | zone/DS/format | |||||
| RETURN (fin immédiate/pgm) | ||||||
| ROLBK (invalidation) | ||||||
| SCAN (recherche) | recherche[ : lg] | chaine[: début] | Position | FD | ||
| SELECT (test multiples) | ||||||
| SETLL (positionnement > ou =) | clé | format (fichier) | NR | ER | EQ | |
| SETGT(positionnement > ) | clé | format (fichier) | NR | ER | ||
| SETON |
--
|
--
|
--
|
|||
| SETOFF |
--
|
--
|
--
|
|||
| SUB (soustraction) | (origine) | val. soustraite | Résultat | + | - | 0 |
| TAG (définition d'un label) | label | |||||
| TESTN (test si numérique) | Chaine | num | (sp) | |||
| UNLOCK (libération) | fichierou DA | |||||
| UPDATE | format | ER | ||||
| WHENXX | élément comparé | val. de comparaison | ||||
| WRITE | format | ER | ||||
| XFOOT (somme d'un tableau) | tableau | Résultat | ||||
| XLATE (transformation) | DE : A | origine[ : début] | Résultat | |||
| Z-ADD (zéro puis ajout) | valeur | Résultat | ||||
| Z-SUB (changement signe) | valeur | Résultat |
ER =Erreur FD =Found NF =not found B = blanc |
Cas particulier des dates en V4
Toutes les calculs de date se font avec des durées, exprimées
comme suit : valeur : *X
(*X indiquant un qualificatif de durée)
| *D | nombre de jours |
| *M | nombre de mois |
| *Y | nombre d'années |
| *H | nombre d'heures |
| *MN | nombre de minutes |
| *S | nombre de secondes |
| *MS | nombre de mico-secondes |
|
Code Opération
|
Facteur 1
|
Facteur 2
|
Zone résultat
|
>>
|
<<
|
= =
|
| ADDDUR | date | durée | date | |||
| SUBDUR | date | durée | date | |||
| date | date | durée | ||||
| EXTRCT | date | jour | mois | année : durée | ||||
| TIME | date/heure/timestamp | |||||
| TEST(D | T | Z) | chaine | ER |
les ordres peuvent être saisis en format libre , entre /free et /end-free
exemple :
C |
les codes opération suivants NE peuvent PAS être saisie en format libre (voir nos propositions de remplacement)
| ADD | ADDDUR | ALLOC | ANDxx | BITOFF | BITON |
| CABxx | CALL | CALLB | CAS | CAT | CHECK |
| CHECKR | COMP | DEFINE | DIV | DO | DOUxx |
| DOWxx | END | EXTRCT | GOTO | IFxx | KFLD |
| KLIST | LOOKUP | MHHZO | MHLZO | MLHZO | MLLZO |
| MOVE | MOVEL | MULT | MVR | OCCUR | ORxx |
| PARM | PLIST | REALLOC | SCAN | SETOFF | SETON |
| SHTDN | SQRT | SUB | SUBDR | SUBST | TAG |
| TESTB | TESTN | TESTZ | TIME | WHENxx | XFOOT |
| XLATE | Z-ADD | Z-SUB |
les codes opération suivants peuvent être saisie en format libre (* indique un nouveau code en V5)
| ACQ | BEGSR | CALLP | CHAIN | CLEAR | CLOSE |
| COMMIT | DEALLOC | DELETE | DOU | DOW | DSPLY |
| DUMP | ELSE | ELSEIF* | ENDxx | ENDSR | EVAL |
| EVALR | EXCEPT | EXFMT | EXSR | FEOD | FOR |
| FORCE | IF | IN | ITER | LEAVE | LEAVESR |
| MONITOR* | NEXT | ON-ERROR* | OPEN | OTHER | OUT |
| POST | READ | READC | READE | READP | READPE |
| REL | RESET | RETURN | ROLBK | SELECT | SETGT |
| SETLL | SORTA | TEST | UNLOCK | UPDATE | WHEN |
| WRITE |
Codes Opération à facteur 2 étendu ou en format libre V5
| Code |
Exemple |
| ACQ | ACQ(E) device fichier_icf; // lien entre un fichier ICF et une unité |
| BEGSR/ ENDSR |
BEGSR toto; |
| CALLP | callp QCMDEXC('wrksplf' : 7) [nécessite un prototype en spécif D] |
| CHAIN | CHAIN(N) nocli clientf1 ; |
| CLEAR | Clear *nokey clientf1; // remise à blanc de clientf1 sauf les clés |
| CLOSE | Close clientp1; |
| COMMIT | Commit; // validation de la dernière transaction |
| DEALLOC | dealloc(N) ptr; //libère l'espace mémoire et affecte null à ptr |
| DELETE | delete clientf1; |
| DOU | Dou %EOF; |
| DOW | Dow not *in03 and not *in12; |
| DSPLY | dsply 'voulez-vous continuer ?' 'QSYSOPR' rep; |
| ELSE | if a = B; |
| ELSEIF | if a = B; |
| EXCEPT | Except detail; // sortie (spécif O) hors cycle. |
| EXFMT | Exfmt image; |
| EXSR | Exsr monsouspro; / exécute monsouspro |
| EVAL (evalr) |
eval(H) montant = (qte * prix) * (1 + (tva /100) ); |
| EVAL-CORR |
eval-CORR DS1 = DS2; // toutes les zones de même nom sont copiées. |
| FEOD | FEOD entcdep1 ; // force écriture physique dans entcdep1 |
| FOR | FOR i = 1 to 15 ENDFOR |
| FORCE | FORCE entcdep1 ; // force ce fichier a être lu au prochain cycle |
| IF | if *in30; |
| IN | IN *lock dataarea ; // lecture d'une data aréa (avec verrou) |
| ITER | iter; // (saute un tour de boucle (dans un FOR par exemple) |
| LEAVE | leave; // (sortie anticipée d'une boucle) |
| LEAVESR | leavesr; // (sortie anticipée d'un sous programme) |
| MONITOR | Monitor; // (démarre un groupe d'instructions sous contrôle) |
| NEXT | next ecran nomfichier; // indique l'unité à lire la prochaine fois |
| ON-ERROR | Monitor; |
| OPEN | OPEN CLientp1; |
| OUT | OUT dataarea; // à jour d'une data -area |
| POST |
Post ecran01; // met à jour l'INFDS d'écran01 |
| READ/readp |
dow not %eof; |
| READE/ |
READe nocde detdcep1; //lecture du suivant si la clé égale nocde. |
| READC |
READC FE; // lecture séquentielle des lignes modifiés dans FE. |
| REL |
REL UNITE ; // le contraire de ACQ |
| RESET |
RESET datastructure; // réattribut les valeurs initiales. [INZ( ).] |
| RETURN |
return: // sortie anticipée d'un programme |
| ROLBK | rolbk; // annulation de la dernière transaction |
| SELECT |
SELECT ; |
| SETLL/setgt |
SETLL nocli entcdef1; // se positionne sur la première commande |
| SORTA |
Sorta tbldestva ;//(tri le tableau, doit être déclaré ASCEND/DESCEND) |
| TEST(E |
test(ed) *ISO datechar; // teste DATECHAR avant conversion. |
| UNLOCK |
if *in12 ; |
| UPDATE |
else ; |
| WRITE |
write clientf1; // ajout d 'un nouveau client. |
| XML-INTO |
xml-into DS1 %xml(data); // lecture XMl et placement dans DS1. |
Options pour les codes opération
|
Code
|
Exemple
|
| (H) |
réalisation d'un arrondi lors de l'opération. |
| (N) |
lecture sans verrouillage. |
| (P) |
complémantation à blanc avec MOVE, MOVEL, XLATE, etc... |
| (M) |
pour un calcul, travailler avec une précision maxi (un seul arrondi. |
| (R) |
pour un calcul, travailler avec la même précision que la variable |
| (E) |
Erreur gérée (pour tout les ordres avec indicateur en <<). |
| (D) |
pour CALLB, transmission du descripteur de paramètres [ILE]. |
| (D,T,Z) |
pour TEST (date, heure, horodatage). |
Fonctions intégrées
voyez
aussi le classement par version
| Fonction(x) |
Retourne |
Exemple |
| %ABS | valeur absolue | |
| %ADDR | l'adresse d'une variable | EVAL prt= %addr(data) |
| %ALLOC | l'adresse d'un nouvel espace mémoire | EVAL prt= %alloc(nboctets) |
| %BITNOT | inverse les bits | %BITNOT(x'00') = x'FF' |
| %BITOR | applique un OU logique bit à bit | %BITOR(x'F0' : x'0F') = x'FF' |
| %BITAND | applique un ET logique bit à bit | %BITAND(x'F1' : x'1F') = x'11' |
| %BITXOR | applique un OU exclusif bit à bit | %BITXOR(x'F1' : x'1F') = x'EE' [1110 1110) |
| %CHAR | transforme date ou numérique en chaîne | ZoneChar=%CHAR(ZoneDec) // 000123,45- ==> '-123,45' |
| %CHECK | la position du premier caractère invalide | Eval pos = %check('0123456789.' : variable) |
| %CHECKR | Idem %CHECK, mais en commencant à droite. | |
| %DATE | convertit une variable (alpha ou dec) en date ou retourne la date du jour. | eval datcmd = %DATE(datchar : *YMD0)//(c'est un zéro) |
| %DAYS | indique un nombre de jours | eval datliv = datcmd + %DAYS(15) |
| %DECPOS | donne le nombre de décimales | |
| %DEC %DECH |
transforme une valeur numérique
(char en V5.2,date en V5.3) en numérique condensé ou
packé. |
eval DATAMJ = %dec(DATCDE : *YMD) |
| %DIFF | exprime un écart entre deux dates ou heures | eval ecart = %DIFF(datliv : datcmd : *DAYS) |
| %DIV |
résultat de la division (entiers uniquement) | |
| %EDITC |
transforme du numérique en chaine avec application
d'un edit code |
eval msg = 'date de traitement' + |
| %EDITW |
idem %EDITC mais avec un mot d'édition | |
| %ELEM | donne le nombre d'occurrences d'un tableau ou d'une DS | if I < %elem(tbl_tva) |
| %EOF |
indique si l'on est fin de fichier | dow not %eof(clients) |
| %ERROR |
indique si on est en erreur (à utiliser suite à un code avec (E).) |
if %error |
| %EQUAL |
indique un positionnement par égalité (SETLL) une recherche aboutie par égalité (LOOKUP) |
|
| %EDITFLT |
transforme de virgule flottante vers chaîne | |
| %FIELDS | Mise à jour d'une liste finie de zones lors d'un UPDATE . | Update clientf1 %FIELDS(nomcli : depcli : ville) ; |
| %FLOAT |
transforme une valeur numérique (ou caractère) au format virgule flottante | |
| %FOUND |
indique un positionnement réalisé(SETLL,SETGT) un recherche aboutie (CHAIN) |
|
| %GRAPH |
conversion en DBCS | |
| %HOURS | exprime un nombre d'heures | eval demain = maintenant + %hours(18) |
| %INT %INTH |
transforme une valeur numérique
(ou caractère en 5.20)au format binaire signé |
|
| %KDS | Utilisation d'une DS en tant que liste de clés sur un CHAIN. | CHAIN %KDS(dscli) clientf1; |
| %LEN |
retourne la longueur d'une expression | if %len(%trim(nom)) > 2 eval L = %len(zone-variable) |
| %LOOKUP |
indique si un élément est présent dans un tableau | eval pos = %lookup('$' : monnaies) |
| %MINUTES | exprime un nombre de minutes | voir %HOURS() |
| %MONTHS | exprime un nombre de mois | voir %DAYS() |
| %MSECONDS | exprime un nombre de microsecondes |
voir %HOURS |
| %NULLIND |
test la val.nulle sur un champ base de données | IF %NULLIND(datcmd) = *ON |
| %OCCUR | positionne sur une occurrence de DS |
%OCCUR(DS1) = 7 ou x = %occur(DS2) |
| %OPEN |
indique si un fichier est ouvert | if %open(clients) |
| %PADDR | l'adresse d'une procédure (pour CALLB) | |
| %PARMS | indique le nombre de paramètres recus | if %parms > 2 |
| %REALLOC | Réalloue un espace mémoire plus grand |
voir %ALLOC |
| %REM |
reste de la division (entiers uniquement) | if %rem(an : 4 )= 0 |
| %REPLACE | remplace par une chaîne l'information située à la position indiquée | [var1 = 'AS/400'] |
| %SECONDS |
exprime un nombre de secondes | voir %HOURS() |
| %SHTDN |
indique si le système est en phase d'arrêt | if %SHTDN |
| %SCAN |
recherche si présence d'une chaîne de caractères | eval chaine = 'ILE/RPG-IV' |
| %SIZE | donne la longueur déclaré d'une variable | if %SUBST(nom : %size(nom): 1) = *blank |
| %STATUS |
indique le n° d'erreur (code status) | if %error and %status(clients) = 1252 |
| %STR | transforme une chaine RPG en chaîne compatible C (pointeur vers une chaine terminée par x'00' ) |
|
| %SUBDT | extrait une partie d'une date | eval annee = %SUBDT(datliv : *YEARS) |
| %SUBST | extraction d'une chaine de caractère | if %subst(raisoc : 1 : 1) <> ' ' |
| %SUBARR | une partie d'un tableau | resultat = %xfoot( %subarr(tbl : i : 5) )// 5 postes |
| %TIME |
convertit une variable (alpha ou dec) en heure ou retourne l'heure en cours. | if %time(pointage : *HMS) = T'23:59:59' |
| %TLOOKUP[xx] |
indique si un élément est présent dans une table GAP | voir %lookup |
| %TRIM | élimination des espaces d'extrémité | eval NP = %trim(nom) + ' ' + %trim(prenom) |
| %TRIML|%TRIMR | élimination des blancs de gauche/de droite | |
| %UCS2 |
conversion en UNICODE | |
| %UNS %UNSH |
transforme une valeur numérique (ou caractère
) au format binaire non signé |
|
| %XFOOT |
somme d'un tableau | eval total = %xfoot(tb_salaire) + prime |
| %XLATE | transforme une variable apha | eval resultat = %XLATE('abcdef' : 'ABCDEF' : origine) |
| %XML | coordonnées des données XML à lire (cf XML-INTO) | xml-into DS1 %xml(data : 'doc=string') |
| %YEARS | exprime un nombre d'années | voir %DAYS |
Proposition de remplacement des
codes invalides en format libre
| Code Opération |
Remplacement |
Exemple |
| ADD | + | EVAL A = A +1 ou A = A+1 ou A+=1 |
| ADDDUR | + | Datliv = datcmd + %DAYS(45) |
| ALLOC | %alloc | |
| ANDxx | (test en libre) | if A=B AND compteur<>0 |
| CABxx | (à éviter) | |
| CALL | CALLP + EXTPGM | CALLP pgmA (parm1 : parm2) |
| CALLB | CALLP + EXTPROC | idem |
| CASxx | IF + EXSR | |
| CAT | + | Message = 'date de traitement' + DATCHAR |
| CHECK | %check | pos = %check('0123456789-+,' : qtechar) |
| CHECKR | %checkr | idem |
| *LIKE DEFINE | déclaration en D avec LIKE( ) | |
| *DTAARA DEFINE | déclaration en D avec DTAARA( ) | |
| DIV | / | |
| DO | FOR | FOR i = 1 to 50 |
| DOUxx | DOU | Dou %eof |
| DOWxx | DOW | Dow not %eof |
| END | ENDxx (déja recommandé avant) | |
| ENDCS | cf CAS | |
| EXTRCT | %subdt | mois = %SUBDT(DATCMD : *M) |
| GOTO | c'est quoi ? ;-) | |
| IFxx | IF | if GAP = 4 |
| KFLD | %KDS ou directement (K1 :K2) | CHAIN (societe: nocli) clientf1 |
| KLIST | (cf ci-dessus) | |
| LOOKUP | %lookup | tva = %lookup(code : tbtva) |
| MOVE | EVALR , Convertir avec les fonction intégrées | datcmd = %DATE(datchar:*ISO) ou chaine = %char(datcmd) |
| MOVEL | EVAL, idem pour les conversions | |
| MOVEA | Pas d'équivalent |
|
| MULT | * | |
| MVR | %rem | if %rem(AN : 4) = 0 |
| OCCUR | %occur | |
| ORxx | cf ANDxx | |
| PARM | Prototype en spécif D * | |
| PLIST | cf PARM | |
| REALLAOC | %realloac | |
| SCAN | %scan | QUATRE = %scan('4' : 'RPG4') |
| SETOFF | *inxx = *off | |
| SETON | *inxx = *on | |
| SUB | - | |
| SUBDUR | - | HIER = AUJOURDHUI - %days(1) |
| ou SUBDUR | %diff | UN = %DIFF(aujourdhui : hier) |
| SUBST | %subst | |
| TAG | cf GOTO | |
| TESTN | %check | if %check('0123456789' : QTECHAR) > 0 |
| TIME | %date() ou %time() | aujourdhui = %date() |
| WHENxx | WHEN | |
| XFOOT | %xfoot | TVA = %xfoot(tbmt) * TAUX |
| XLATE | %xlate | GRAND = %xlate(minuscles: majuscules: PETIT) |
| Z-ADD | EVAL | |
| Z-SUB | EVAL - |
* CALLP est apparu en V3R60 et permet un appel en format libre :
+-----------------------------------------------------------+
! DEXEC PR EXTPGM('QCMDEXC') !
! D 250 const !
! D 15P 5 const !
+-----------------------------------------------------------+ PR indique qu'il s'agit d'un prototype (même positions que DS)
EXTPGM le nom du pgm externe (peut être qualifié)
CONST sur un paramètre indique que ce paramètre peut ne PAS
être unevariable (constante, calcul, fonction intégrée, ...)
VALUE passage de paramètre par valeur (pas de valeur retour)
OPTIONS(*NOPASS) ce paramètre peut ne pas etre transmis
[tester le nombre de paramètres avec %parms() ]
OPTIONS(*OMIT) ce paramètre peut etre omis
[tester le paramètre avec %addr(param) <> *NULL]
Exemple :
/free
exec('WRKSPLF': 7) ;
/end-free
avec prototype ET interface de procédure ( PI )
DProgrammeB PR EXTPGM('PROGRAMMEB')
D 6 0
DProgrammeB PI
D nocli 6 0
(C) Volubis 2001-2007