Code opération RPG III / RPG/400 · IBM i (AS/400) · Sous-programmes et appels
DSPLY
Afficher un message
Affiche le contenu du facteur 1 dans un message au travail ou à une file de messages ; un résultat attend une réponse de l'utilisateur.
Syntaxe
C zone DSPLY
C zone DSPLY'QSYSOPR'
C zone DSPLY repons
- Facteur 1 (18-27)
- La zone ou le littéral à afficher : 52 caractères au plus. Un littéral tient dans les 10 colonnes : 8 caractères utiles, apostrophes comprises dans les 10.
- Facteur 2 (33-42)
- Facultatif : la file de messages qui reçoit le message. À blanc, le message part vers la file de l'utilisateur (ou
QSYSOPRpour un travail sans écran, comme dans les exemples). - Zone résultat (43-48)
- Facultatif : la zone qui reçoit la réponse tapée. Le programme attend alors cette réponse, ce qui bloquerait un travail par lots. À ne pas utiliser dans les exemples ni en traitement de nuit.
- Effet
- Le texte du facteur 1 est envoyé en message. Une zone numérique s'affiche sans virgule ni point décimal, sur toute sa longueur, avec le signe à droite (
23400-pour -234,00) ; une zone alphanumérique s'affiche telle quelle. Aucun indicateur n'est modifié.
À quoi ça sert
DSPLY est le « print » du RPG III : afficher une valeur pendant la mise au point, informer l'opérateur, poser une question simple. Dans un traitement de nuit, c'est le moyen le plus rapide de voir où en est le programme.
Exemple 1 : 52 caractères, numériques
H* DSPLY : 52 caracteres au plus, numeriques sans virgule
I 'ABCDEFGHIJKLMNOPQRST'C L1
I 'abcdefghijklmnopqrst'C L2
I '0123456789AB' C L3
C L1 CAT L2 LONG 52
C MOVE L3 LONG
C LONG DSPLY
C Z-ADD123.45 MONT 72
C MONT DSPLY
C Z-SUB234 NEG 72
C NEG DSPLY
C Z-ADD7 PETIT 50
C PETIT DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
ABCDEFGHIJKLMNOPQRSTabcdefghijklmnopqrst0123456789AB
12345
23400-
7
La zone LONG de 52 caractères s'affiche en entier. Les montants s'affichent sans virgule : 123,45 devient 12345, -234,00 devient 23400-, et un entier de 5 chiffres affiche 7 aligné à droite.
Exemple 2 : Libellé et valeur
H* DSPLY : libelle et valeur dans une zone alphanumerique
I 'Total a payer : ' C LIB
C Z-ADD1450.5 TOTAL 72
C MOVE TOTAL ZTOT 7
C LIB CAT ZTOT MSG 30
C MSG DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Total a payer : 0145050
Un seul facteur 1 par DSPLY : pour joindre un libellé et un montant, on les assemble dans une zone alphanumérique avec CAT. Le montant devenu texte par MOVE garde sa forme brute à 7 chiffres sans virgule : 0145050 pour 1450,50. Le libellé est une constante nommée (spécification I), car un littéral de facteur 2 est limité à 8 caractères.
Le piège
52 caractères au maximum, vérifié à la compilation. Un DSPLY sur une zone de 60 caractères n'est pas tronqué : le compilateur le refuse, QRG7016 (gravité 20), « La longueur totale des zones associées à l'opération DSPLY est supérieure à 52 positions. » Coupez la zone avant d'afficher.
Un littéral en facteur 1 de plus de 8 caractères est refusé : DSPLY sur 'Total TTC' (9 caractères) donne QRG5150 (gravité 30), « Le littéral entré en Facteur 1 est incorrect. » Passez par une zone ou une constante nommée.
Pas de virgule à l'affichage. Un montant de 1250,50 apparaît comme 125050 : le lecteur doit connaître le nombre de décimales.
En RPG ILE full free
En RPG ILE, DSPLY est une instruction à part entière (dsply message;) qui accepte une expression, donc un libellé et une valeur dans le même appel avec %char. La limite des 52 caractères reste la même pour la partie texte.
dsply ('Total a payer : ' + %char(total));