Code opération RPG III / RPG/400 · IBM i (AS/400) · Calculs
XFOOT
Totaliser un tableau
Additionne tous les postes d'un tableau numérique et range la somme dans la zone résultat.
Syntaxe
C XFOOTtableau result 92
C XFOOTtableau result 92H
- Facteur 1 (18-27)
- Toujours vide.
- Facteur 2 (33-42)
- Le nom du tableau numérique, sans indice, déclaré en spécification E.
- Zone résultat (43-48)
- Reçoit la somme de tous les postes.
- Longueur (49-51)
- Longueur totale de la zone résultat, décimales comprises. Renseignée quand la zone apparaît pour la première fois dans le programme : c'est ce qui la définit. Sans longueur, une zone encore inconnue provoque
QRG7030, « La zone ou l'indicateur n'est pas défini ». - Décimales (52)
- Nombre de décimales de la zone résultat ; 0 pour un entier.
- Colonne 53
Hdemande l'arrondi (demi supérieur) : si le résultat a plus de décimales que la zone résultat, le résultat est arrondi à la valeur la plus proche (1,09945 devient 1,10 pour deux décimales). SansH, les décimales en trop sont simplement coupées, sans arrondi.- Indicateurs de conditionnement (9-17)
- Facultatif : l'opération n'est exécutée que si les indicateurs indiqués ont l'état demandé.
- Effet
- La zone résultat contient la somme de tous les postes du tableau, ramenée à sa longueur et à ses décimales : décimales en trop coupées (arrondies avec
H), chiffres de gauche perdus sans erreur.
À quoi ça sert
XFOOT (pour « cross foot ») évite la boucle d'addition sur un tableau : total des ventes mensuelles, des lignes d'une commande, des quantités par magasin. Le tableau est déclaré en spécification E avec son nombre de postes, sa longueur et ses décimales.
Exemple 1 : Total de quatre ventes
H* XFOOT : total d'un tableau
E VTE 4 7 2
C Z-ADD1200.50 VTE,1
C Z-ADD800 VTE,2
C Z-ADD350.25 VTE,3
C Z-ADD99.99 VTE,4
C XFOOTVTE TOTAL 92
C 'Total' DSPLY
C TOTAL DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Total
245074
La spécification E déclare VTE : 4 postes de 7 chiffres dont 2 décimales. Après le chargement des postes par Z-ADD (VTE,1…), XFOOT VTE TOTAL donne 1200,50 + 800 + 350,25 + 99,99 = 2450,74, affiché 245074.
Exemple 2 : Arrondi H et troncature
H* XFOOT : arrondi H et troncature
E PRX 3 5 2
C Z-ADD60.60 PRX,1
C Z-ADD50.70 PRX,2
C Z-ADD30.50 PRX,3
C XFOOTPRX SANSH 30
C XFOOTPRX AVECH 30H
C XFOOTPRX PETIT 20
C 'Sans H' DSPLY
C SANSH DSPLY
C 'Avec H' DSPLY
C AVECH DSPLY
C 'Zone 2' DSPLY
C PETIT DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Sans H
141
Avec H
142
Zone 2
41
Trois prix totalisent 141,80. Une zone entière sans H garde 141, avec H 142 ; une zone de 2 chiffres ne garde que 41 (le « 1 » de gauche est perdu, sans erreur).
Le piège
La zone résultat doit être assez grande pour la somme de tous les postes. Dans le second exemple, la zone de 2 chiffres reçoit 141 et affiche 41, sans erreur ni indicateur.
Le tableau doit être déclaré en spécification E avant les spécifications de calcul, avec son nombre de postes (colonnes 36-39), sa longueur (40-42) et ses décimales (44).
En RPG ILE full free
En RPG ILE full free, la fonction intégrée %XFOOT renvoie la somme des postes d'un tableau.
dcl-s vte packed(7: 2) dim(4);
total = %xfoot(vte);