RPG400/ nouveautés V2 Edition 1.0 Gestion des verrouillages d'enregistrements: + Lecture sans verrouillage d'enregistrement pour un fichier ouvert en U. N en colonne 53 f1 cod-op f2 zr H>><<== C CLE CHAINFORMAT N90 ou READ FORMAT N 90 etc.. = lecture seule (pas de mise à jour possible) (pas de verrouillage sauf avec STRCMTCTL LCKLVL(*ALL).) évite une double définition du fichier + Déverrouillage d'un enregistrement avec UNLCK f1 cod-op f2 zr H>><<== UNLCKFICHIER 99 |
Programmation structurée. Marquage de fin de groupe ENDIF IF ENDDO DO, DOW, DOU ENDCS CAS ENDSL SELEC (à suivre) Meilleure lisibilité du pgm Détection des erreurs plus simple sur une liste de compil END toujours supporté Constantes figuratives pour indicateurs *ON (= '1') *OFF (= '0') valides sur les tests et les MOVE. |
Codes de programmation structurée. SELECT / WHEN / OTHER (peu différent du EVALUATE COBOL, ou CAS mais sans sous-programmes) f1 cod-op f2 zr H>><<== début de sélection SELEC F1 WHxx F2 1ère sélection ... SI vraie, exécution et débranchement ... après ENDSL F1 WHxx F2 2ème sélection ... SI vraie, exécution et débranchement ... après ENDSL(testée si 1ère est fausse) OTHER SInon ... SI 1ère et 2ème sélection fausse ... (OTHER facultatif) ENDSL WHxx a la même structure qu'un IF (xx = EQ,NE,GT etc...) peut être complété par ANDXX ou ORXX. |
LEAVE et ITER Sortie anticipée d'une boucle (DO, DOW, DOU) LEAVE = sortie de la boucle (saut à l'instruction suivant le END) ITER = fin d'une itération (saut à l'instruction END, ==> retour éventuel en début de boucle suivant les conditions de fin) f1 cod-op f2 zr H>><<== *IN03 DOUEQ*ON ^ EXFMTIMAGE 99 . *IN99 IFEQ *ON . LEAVE --------------------- . ENDIF ! . *IN12 IFEQ *ON ! . ITER ---- ! . ENDIF ! ! . ... ! ! . . . . . . .ENDDO<--! ! ... <-------------------! |
Traitement de chaînes de caractères: XLATE recherche et remplacement de caractères le facteur 1 contient deux arguments séparés par ':' 1° les caractères à rechercher (constante ou variable) 2° les caractères de remplacement (idem) le facteur 2 contient la chaîne de caractères source éventuellement suivie de ':' puis de la position de départ la zone résultat contient une variable recevant le résultat Exemples: f1 cod-op f2 zr H>><<== MOVE '1.234.56'CHAINE C '.':',' XLATECHAINE:3 RESULT (RESULT = '1.234,56') |
I 'ABCDEFGHIJKLMNOPQRST-C MA I 'UVWXYZ' I 'abcdefghijklmnopqrst-C MI I 'uvwxyz' C MOVE 'Alphabet'CHAINE C MI:MA XLATECHAINE RESULT (minuscules/MAJUSCULES) * (RESULT = ALPHABET) C MOVE 'Alphabet'CHAINE C MA:MI XLATECHAINE RESULT (MAJUSCULES/minuscules) * (RESULT = alphabet) Complémentation à blanc (zone résultat) pour SUBST, CAT et XLATE P en colonne 53 (P comme Padding with blanks) C MOVE *ALL'-' RESULT 10 = '----------' C MOVE 'Alphabet'CHAINE 8 C MI:MA XLATECHAINE RESULT = 'ALPHABET--' C MI:MA XLATECHAINE RESULT P = 'ALPHABET ' |
contrôle du contenu d'une variable CHECK le facteur 1 contient les caractères autorisés le facteur 2 contient la chaîne de caractères à explorer la zone résultat peut contenir .une zone numérique (recevra la position du premier caractère invalide) .un tableau (postes numériques) chaque poste recevra la position d'un caractère invalide) * minuscules imposées I 'abcdefghijklmnopqrst-C MI I 'uvwxyz ' C MOVE 'nanteS .'CHAINE MI CHECKCHAINE NUM = 6 (S) MI CHECKCHAINE TB TB,1 = 6 (S) TB,2 = 8 (.) autres postes = 0 |
Une reprise est maintenant possible sur le message RPG1218 RPG1218 Message . . . . : (R C G S D F) &1 à &2 Allocation impossible d'un enregistrement de &5. ... Que faire . . . : Entrez R pour recommencer l'opération d'entrée seulement si le programme a été compilé pour la version 2 minimum) ... = Relance de l'opération en cause en logique libre. = Débranchement à *GETIN pour fichier primaire ou secondaire. La commande DSPPGMREF a été améliorée: Inclus maintenant les appels de pgm en RPG. |