Archives par mot-clé : SORT

Exemple – SORT dans un programme

L’instruction SORT en cobol est utilisée pour trier les enregistrements par un champ clé que nous indiquons.
On peut choisir plusieurs clés et définir si l’ordre sera croissant ou décroissant.
Pour l’exemple, nous créons un fichier temporaire dans notre programme que nous utiliserons pour générer les informations triées qu’il contient.
En tant qu’enregistrements à trier, nous utiliserons une table interne, nous n’aurons donc à aucun moment besoin d’utiliser des fichiers.
Les informations demandées seront chargées du fichier temporaire dans le registre de sortie, qui peut être utilisé tout au long de l’exécution.

 IDENTIFICATION DIVISION.
 PROGRAM-ID. PRGSORT.

 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 SPECIAL-NAMES.
      DECIMAL-POINT IS COMMA.

 INPUT-OUTPUT SECTION.
 FILE-CONTROL.
     SELECT TABLE-SORT ASSIGN TO DISK "SORTWORK".

 DATA DIVISION.
 FILE SECTION.

 SD TABLE-SORT
 DATA RECORD IS ELEMENT-SORT.

 01  ELEMENT-SORT.
     05 SORT-CLE1              PIC X(01).
     05 SORT-CLE2              PIC X(03).
     05 SORT-CHAMP             PIC X(10).
     05 SORT-INDICATEUR        PIC X(01).

 WORKING-STORAGE SECTION.

 01  VARIABLES.
     05 WA-REGISTRE.
        10 WA-SORT-CLE1        PIC X(01).
        10 WA-SORT-CLE2        PIC X(03).
        10 WA-SORT-CHAMP       PIC X(10).
        10 WA-SORT-INDICATEUR  PIC X(01).

 01  SWITCHES.
     05 SW-FIN-TABLE-SORT      PIC X(01).
        88 SI-FIN-TABLE-SORT             VALUE 'S'.
        88 NO-FIN-TALEA-SORT             VALUE 'N'.
     05 WI-ELEM                PIC 9(02) VALUE ZEROES.   

 01  TABLE.
     05 WT-TBL-LISTE.
        10                     PIC X(15) VALUE 'F216CAMPO02802S'.
        10                     PIC X(15) VALUE 'M144CAMPO17114N'.
        10                     PIC X(15) VALUE 'Q651CAMPO24536S'.
        10                     PIC X(15) VALUE 'F217CAMPO03312N'.
        10                     PIC X(15) VALUE 'T487CAMPO44914S'.
        10                     PIC X(15) VALUE 'O372CAMPO52113N'.
        10                     PIC X(15) VALUE 'F457CAMPO61224N'.
        10                     PIC X(15) VALUE 'L547CAMPO73985N'.
        10                     PIC X(15) VALUE 'L354CAMPO89173N'.
        10                     PIC X(15) VALUE 'W516CAMPO92815N'.
     05 REDEFINES WT-TBL-LISTE.
        10 WT-TBL-ELEMENTE     OCCURS 10 TIMES.
           15 WT-TBL-CLE1       PIC X(01).
           15 WT-TBL-CLE2       PIC X(03).
           15 WT-TBL-CHAMP      PIC X(10).
           15 WT-TBL-INDICATEUR PIC X(01).

 01  WR-ELEMENTE-SORT.
     05 WR-SORT-CLE1           PIC X(01).
     05 WR-SORT-CLE2           PIC X(03).
     05 WR-SORT-CHAMP          PIC X(10).
     05 WR-SORT-INDICATEUR     PIC X(01).

 PROCEDURE DIVISION.

     PERFORM 1000-INIT
     PERFORM 2000-PROCESS
     PERFORM 9000-FINAL
     STOP RUN.
     .

 1000-INIT.
     INITIALIZE VARIABLES
     .

 2000-PROCESS.
     SORT TABLE-SORT
          ON ASCENDING KEY SORT-CLE1
          ON DESCENDING KEY SORT-CLE2
          INPUT PROCEDURE 2100-PROCESS-ENTREE
          OUTPUT PROCEDURE 2200-PROCESS-SORTIE

     IF  SORT-RETURN NOT EQUAL ZEROES
         DISPLAY 'ERROR SUR LE SORT:' SORT-RETURN
     END-IF
     .

 2100-PROCESS-ENTREE.
     PERFORM VARYING WI-ELEM
        FROM 1 BY 1 UNTIL WI-ELEM > 10
        MOVE WT-TBL-CLE1       (WI-ELEM) TO WR-SORT-CLE1
        MOVE WT-TBL-CLE2       (WI-ELEM) TO WR-SORT-CLE2
        MOVE WT-TBL-CHAMP      (WI-ELEM) TO WR-SORT-CHAMP
        MOVE WT-TBL-INDICATEUR (WI-ELEM) TO WR-SORT-INDICATEUR
        RELEASE ELEMENTE-SORT FROM WR-ELEMENTE-SORT
        DISPLAY 'REGISTRE EN ENTREE :' WR-ELEMENTE-SORT
     END-PERFORM
     .

 2200-PROCESS-SORTIE.
     SET NO-FIN-TABLE-SORT TO TRUE
     PERFORM UNTIL SI-FIN-TABLE-SORT
        RETURN TABLE-SORT INTO WR-ELEMENTE-SORT
        AT END
           SET SI-FIN-TABLE-SORT TO TRUE
        NOT AT END
           MOVE WR-SORT-CLE1       TO WA-SORT-CLE1
           MOVE WR-SORT-CLE2       TO WA-SORT-CLE2
           MOVE WR-SORT-CHAMP      TO WA-SORT-CHAMP
           MOVE WR-SORT-INDICATEUR TO WA-SORT-INDICATEUR
           DISPLAY 'REGISTRE EN SORTIE :' WA-REGISTRE
        END-RETURN
     END-PERFORM
     .

 9000-FINAL.
     DISPLAY "FIN DU PROGRAMME DE CLASSIFICATION"
     .

RESULTAT

REGISTRE EN ENTREE :F216CAMPO02802S
                    M144CAMPO17114N
                    Q651CAMPO24536S
                    F217CAMPO03312N
                    T487CAMPO44914S
                    O372CAMPO52113N
                    F457CAMPO61224N
                    L547CAMPO73985N
                    L354CAMPO89173N
                    W516CAMPO92815N

REGISTRE EN SORTIE :F457CAMPO61224N
                    F217CAMPO03312N
                    F216CAMPO02802S
                    L547CAMPO73985N
                    L354CAMPO89173N
                    M144CAMPO17114N
                    O372CAMPO52113N
                    Q651CAMPO24536S
                    T487CAMPO44914S
                    W516CAMPO92815N	

FIN DU PROGRAMME DE CLASSIFICATION

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