A instrução SORT em cobol é usada para classificar registros por um campo-chave que indicamos.
Podemos escolher várias chaves e definir se a ordem será crescente ou decrescente.
Para o exemplo, criamos um arquivo temporário em nosso programa que usaremos para gerar as informações ordenadas nele.
Como registros a ordenar, utilizaremos uma tabela interna, de forma que não precisaremos utilizar arquivos em nenhum momento.
As informações solicitadas serão carregadas do arquivo temporário para o registrador de saída, que poderá ser usado ao longo da execução.
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGSORT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT TABELA-SORT ASSIGN TO DISK "SORTWORK".
DATA DIVISION.
FILE SECTION.
SD TABELA-SORT
DATA RECORD IS ELEMENTO-SORT.
01 ELEMENTO-SORT.
05 SORT-CLAVE1 PIC X(01).
05 SORT-CLAVE2 PIC X(03).
05 SORT-CAMPO PIC X(10).
05 SORT-INDICADOR PIC X(01).
WORKING-STORAGE SECTION.
01 VARIABLES.
05 WA-REGISTRO.
10 WA-SORT-CLAVE1 PIC X(01).
10 WA-SORT-CLAVE2 PIC X(03).
10 WA-SORT-CAMPO PIC X(10).
10 WA-SORT-INDICADOR PIC X(01).
01 SWITCHES.
05 SW-FIN-TABELA-SORT PIC X(01).
88 SI-FIN-TABELA-SORT VALUE 'S'.
88 NO-FIN-TABELA-SORT VALUE 'N'.
05 WI-ELEM PIC 9(02) VALUE ZEROES.
01 TABELA.
05 WT-TBL-LISTA.
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-LISTA.
10 WT-TBL-ELEMENTO OCCURS 10 TIMES.
15 WT-TBL-CLAVE1 PIC X(01).
15 WT-TBL-CLAVE2 PIC X(03).
15 WT-TBL-CAMPO PIC X(10).
15 WT-TBL-INDICADOR PIC X(01).
01 WR-ELEMENTO-SORT.
05 WR-SORT-CLAVE1 PIC X(01).
05 WR-SORT-CLAVE2 PIC X(03).
05 WR-SORT-CAMPO PIC X(10).
05 WR-SORT-INDICADOR PIC X(01).
PROCEDURE DIVISION.
PERFORM 1000-INICIO
PERFORM 2000-PROCESO
PERFORM 9000-FINAL
STOP RUN.
.
1000-INICIO.
INITIALIZE VARIABLES
.
2000-PROCESO.
SORT TABELA-SORT
ON ASCENDING KEY SORT-CLAVE1
ON DESCENDING KEY SORT-CLAVE2
INPUT PROCEDURE 2100-PROCESO-ENTRADA
OUTPUT PROCEDURE 2200-PROCESO-SALIDA
IF SORT-RETURN NOT EQUAL ZEROES
DISPLAY 'ERROR NO SORT:' SORT-RETURN
END-IF
.
2100-PROCESO-ENTRADA.
PERFORM VARYING WI-ELEM
FROM 1 BY 1 UNTIL WI-ELEM > 10
MOVE WT-TBL-CLAVE1 (WI-ELEM) TO WR-SORT-CLAVE1
MOVE WT-TBL-CLAVE2 (WI-ELEM) TO WR-SORT-CLAVE2
MOVE WT-TBL-CAMPO (WI-ELEM) TO WR-SORT-CAMPO
MOVE WT-TBL-INDICADOR (WI-ELEM) TO WR-SORT-INDICADOR
RELEASE ELEMENTO-SORT FROM WR-ELEMENTO-SORT
DISPLAY 'REGISTRO DE ENTRADA:' WR-ELEMENTO-SORT
END-PERFORM
.
2200-PROCESO-SALIDA.
SET NO-FIN-TABELA-SORT TO TRUE
PERFORM UNTIL SI-FIN-TABELA-SORT
RETURN TABELA-SORT INTO WR-ELEMENTO-SORT
AT END
SET SI-FIN-TABELA-SORT TO TRUE
NOT AT END
MOVE WR-SORT-CLAVE1 TO WA-SORT-CLAVE1
MOVE WR-SORT-CLAVE2 TO WA-SORT-CLAVE2
MOVE WR-SORT-CAMPO TO WA-SORT-CAMPO
MOVE WR-SORT-INDICADOR TO WA-SORT-INDICADOR
DISPLAY 'REGISTRO DE SAIDA :' WA-REGISTRO
END-RETURN
END-PERFORM
.
9000-FINAL.
DISPLAY "TERMINO DO PROGRAMA DE CLASSIFICACAO"
.
Resultado:
REGISTRO DE ENTRADA:F216CAMPO02802S
M144CAMPO17114N
Q651CAMPO24536S
F217CAMPO03312N
T487CAMPO44914S
O372CAMPO52113N
F457CAMPO61224N
L547CAMPO73985N
L354CAMPO89173N
W516CAMPO92815N
REGISTRO DE SAIDA :F457CAMPO61224N
F217CAMPO03312N
F216CAMPO02802S
L547CAMPO73985N
L354CAMPO89173N
M144CAMPO17114N
O372CAMPO52113N
Q651CAMPO24536S
T487CAMPO44914S
W516CAMPO92815N
TERMINO DO PROGRAMA DE CLASSIFICACAO
© Copyright Consultorio cobol
|