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 W516CAMPO92815NREGISTRE EN SORTIE :
F457CAMPO61224N F217CAMPO03312N F216CAMPO02802S L547CAMPO73985N L354CAMPO89173N M144CAMPO17114N O372CAMPO52113N Q651CAMPO24536S T487CAMPO44914S W516CAMPO92815NFIN DU PROGRAMME DE CLASSIFICATION