Classification interne
Instruction MERGE dans un programme COBOL.
Nous avons vu dans d’autres articles comment faire un MERGE dans un JCL.
Dans cet article, nous verrons comment faire cela dans un programme cobol.
Utilité? Ça dépend.
La vérité est qu’étant capable de faire cela par JCL, je ne vois aucune raison de le faire dans un programme.
Mais qui sait!
Certains lecteurs pourront peut-être nous donner une idée de son utilisation pratique.
MERGE:
L’instruction MERGE en cobol sert à joindre deux fichiers en tenant compte de la clé par laquelle ils sont triés.
C’est-à-dire que nous ne pouvons pas MERGE des fichiers désordonnés.
Ce qu’il fera, c’est “mettre” les clés correspondantes ensemble dans le fichier de sortie.
Pour l’exemple, nous utiliserons :
– 2 fichiers d’entrée avec les données à joindre.
– 1 fichier temporaire où se produira la MERGE.
Les données des fichiers d’entrée pour notre exemple seront :
Fichier 1 | Fichier 2 |
---|---|
A B C | B C E |
IDENTIFICATION DIVISION.
PROGRAM-ID.PRGMERGE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* Définition des fichiers
SELECT TABLE-MERGE ASSIGN TO DISK 'SORTWORK'.
SELECT TABLE-FICHIER1 ASSIGN TO FICHIER1.
SELECT TABLE-FICHIER2 ASSIGN TO FICHIER2.
DATA DIVISION.
FILE SECTION.
* Fichiers physiques
FD TABLE-FICHIER1
DATA RECORD IS FICHIER1.
01 FICHIER1.
05 FILLER PIC X(001).
FD TABLE-FICHIER2
DATA RECORD IS FICHIER2.
01 FICHIER2.
05 FILLER PIC X(001).
* Fichier temporaire
SD TABLE-MERGE
DATA RECORD IS ELEMENTO-MERGE.
01 ELEMENT-MERGE.
05 MERGE-CLE1 PIC X(001).
WORKING-STORAGE SECTION.
* Variable où nous enregistrerons le résultat de MERGE
01 VARIABLES.
05 WA-REGISTRE.
10 WA-AUX-CLE1 PIC X(001).
* Switch pour la boucle
01 SWITCH.
05 SW-FIN-TABLE-MERGE PIC X(001).
88 SI-FIN-TABLE-MERGE VALUE 'O'.
88 NO-FIN-TABLE-MERGE VALUE 'N'.
* Enregistrement de données après MERGE
01 WR-ELEMENT-MERGE.
05 WR-MERGE-CLE1 PIC X(001).
PROCEDURE DIVISION.
PERFORM 1000-INIT
PERFORM 2000-PROCESS
PERFORM 9000-FINAL
.
1000-INIT.
INITIALIZE VARIABLES
.
2000-PROCESS.
* Instruction MERGE
* Nous joignons FICHIER1 et FICHIER2 dans TABLE-MERGE par clé
* MERGE-CLE1
MERGE TABLE-MERGE ASCENDING KEY MERGE-CLE1
USING FICHIER1 FICHIER2
OUTPUT PROCEDURE 2100-PROCESS-SORTIE
* Dans OUTPUT PROCED nous utiliserons les informations déjà recueillies
IF SORT-RETURN NOT = ZEROS
DISPLAY 'ERREUR DANS LE MERGE:' SORT-RETURN
END-IF
.
2100-PROCESS-SORTIE.
* On passe du fichier temporaire au registre de sortie avec
* l'instruction RETURN
* On affiche les informations d'une variable définie dans
* le programme
SET NO-FIN-TABLE-MERGE TO TRUE
PERFORM UNTIL SI-FIN-TABLE-UNION
RETURN TABLE-MERGE INTO WR-ELEMENT-MERGE
AT END
SET SI-FIN-TABLE-MERGE TO TRUE
NOT AT END
MOVE WR-MERGE-CLE1 TO WA-AUX-CLE1
DISPLAY 'REGISTRE-> ' WA-REGISTRE
END-RETURN
END-PERFORM
.
9000-FINAL.
STOP RUN
.
RESULTAT : REGISTRE-> A B B C C E
Remarque :
même si vous ne voyez aucun paragraphe “ouvrir le fichier”, “lire le fichier”, etc., cela ne signifie pas que nous avons perdu le FOCUS, c’est juste que ce n’est pas nécessaire !