Archives par mot-clé : MERGE

Exemple – MERGE

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 1Fichier 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 !

Exemple – SORT/MERGE

Le tri des données dans un fichier ou la fusion de deux fichiers ou plus est un besoin courant dans presque toutes les applications métier.

Le tri est utilisé pour classer les enregistrements dans l’ordre croissant ou décroissant afin qu’un traitement séquentiel puisse être effectué. Deux techniques sont utilisées pour classer les fichiers en COBOL :

  • Le tri externe est utilisé pour trier les fichiers à l’aide de l’utilitaire SORT dans le JCL. Nous en parlons dans le chapitre JCL.
    Désormais, nous nous concentrerons sur le classement interne.
  • Le tri interne est utilisé pour trier les fichiers dans un programme COBOL.
    Le verbe SORT est utilisé pour trier un fichier.

SORT

Trois fichiers sont utilisés dans le processus de classification en COBOL :

  • Le fichier d’entrée est le fichier que nous devons trier par ordre croissant ou décroissant.
  • Le fichier de travail est utilisé pour conserver des enregistrements pendant que le processus de tri est en cours. Les enregistrements du fichier d’entrée sont transférés dans le fichier de travail pour le processus de classification. Ce fichier doit être défini dans la section Fichier de l’entrée SD.
  • Le fichier de sortie est le fichier que nous obtenons après le processus de classification. C’est la sortie finale du verbe Sort.

Syntaxe

Voici la syntaxe pour trier un fichier :

SORT TEST-FIC ON ASCENDING KEY REC-CLE1
    [ON DESCENDING KEY REC-CLE2]
     USING ENTREE-FIC GIVING SORTIE-FIC.

SORT effectue les opérations suivantes :

  • Ouvre le fichier de travail en mode IO, le fichier d’entrée en mode INPUT et le fichier de sortie en mode OUTPUT.

    Transfère les enregistrements présents dans le fichier d’entrée vers le fichier de travail.
  • Trie le FICHIER DE TRI dans l’ordre croissant/décroissant par clé d’enregistrement.
  • Transfère les enregistrements triés du fichier de travail vers le fichier de sortie.
  • Ferme le fichier d’entrée et le fichier de sortie et supprime le fichier de travail.

Exemple

Dans l’exemple suivant, INPUT est le fichier d’entrée qui doit être trié par ordre croissant :

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SORT.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.

           SELECT ENTREE   ASSIGN TO IN.
           SELECT SORTIE   ASSIGN TO OUT.
           SELECT TRAVAIL  ASSIGN TO WRK.

       DATA DIVISION.
       FILE SECTION.

       FD  ENTREE.
       01  ENTREE-ETUDIANT.
           05 ETUDIANT-ID-I   PIC 9(05).
           05 ETUDIANT-NAME-I PIC A(25).

       FD  SORTIE.
       01  SORTIE-ETUDIANT.
           05 STUDENT-ID-O   PIC 9(05).
           05 STUDENT-NAME-O PIC A(25).

       SD  TRAVAIL.
       01  TRAVAIL-ETUDIANT.
           05 ETUDIANT-ID-W   PIC 9(05).
           05 ETUDIANT-NOM-W PIC A(25).

       PROCEDURE DIVISION.

           SORT TRAVAIL ON ASCENDING KEY ETUDIANT-ID-O
                USING ENTREE GIVING SORTIE.
                DISPLAY 'Sort Successful'.
       STOP RUN.

JCL pour l’exécution du programme COBOL :

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM=CADSORT
//IN DD DSN=ENTREE-NOM-FICHIER,DISP=SHR
//OUT DD DSN=SORTIE-NOM-FICHIER,DISP=SHR
//WRK DD DSN=&&TEMP

Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant :

Sort Successful

MERGE

Deux ou plusieurs fichiers séquencés de manière identique sont combinés à l’aide de l’instruction Merge. Fichiers utilisés dans le processus de fusion :

  • Fichiers d’entrée : Entrée-1, Entrée-2
  • Fichier de travail
  • Fichier de sortie

Syntaxe

Voici la syntaxe pour fusionner deux ou plusieurs fichiers :

MERGE TRAVAIL-FIC ON ASCENDING KEY REC-CLE1
     [ON DESCENDING KEY REC-CLE2]
      USING ENTREE-1, ENTREE-2 GIVING SORTIE-FIC.

Fusionner (MERGE) effectue les opérations suivantes :

  • Ouvre le fichier de travail en mode IO, les fichiers d’entrée en mode INPUT et le fichier de sortie en mode OUTPUT.
  • Transfère les enregistrements présents dans les fichiers d’entrée vers le fichier de travail.
  • Trie le SORT-FIC dans l’ordre croissant/décroissant par REC-CLE.
  • Transfère les enregistrements triés du fichier de travail vers le fichier de sortie.
  • Ferme le fichier d’entrée et le fichier de sortie et supprime le fichier de travail.

Exemple

Dans l’exemple suivant, ENTREE1 et ENTREE2 sont les fichiers d’entrée qui doivent être fusionnés dans l’ordre croissant :

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SORT.

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.

           SELECT ENTREE1  ASSIGN TO IN1.
           SELECT ENTREE2  ASSIGN TO IN2.
           SELECT SORTIE   ASSIGN TO OUT.
           SELECT TRAVAIL  ASSIGN TO WRK.

       DATA DIVISION.
       FILE SECTION.

       FD  ENTREE1.
       01  ENTREE1-ETUDIANT.
           05 ETUDIANT-ID-I1   PIC 9(05).
           05 ETUDIANT-NOM-I1  PIC A(25).

       FD  ENTREE2.
       01  ENTREE2-ETUDIANT.
           05 ETUDIANT-ID-I2   PIC 9(05).
           05 ETUDIANT-NOM-I2  PIC A(25).

       FD  SORTIE.
       01  SORTIE-ETUDIANT.
           05 ETUDIANT-ID-O    PIC 9(05).
           05 ETUDIANT-NOM-O   PIC A(25).

       SD  TRAVAIL.
       01  TRAVAIL-ETUDIANT.
           05 ETUDIANT-ID-W    PIC 9(05).
           05 ETUDIANT-NOM-W   PIC A(25).

       PROCEDURE DIVISION.

           MERGE TRAVIL ON ASCENDING KEY ETUDIANT-ID-O
                 USING ENTREE1, ENTREE2 GIVING SORTIE.
                  DISPLAY 'Merge Successful'.
           STOP RUN.

JCL pour l’exécution du programme COBOL :

//EXEMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM=SORT
//IN1 DD DSN=ENTREE1-NOM-FICHIER,DISP=SHR
//IN2 DD DSN=ENTREE2-NOM-FICHIER,DISP=SHR
//OUT DD DSN=SORTIE-NOM-FICHIER,DISP=SHR
//WRK DD DSN=&&TEMP

Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant :

Merge Successful