COBOL - Instrução SORT em um programa



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - Instrução SORT em um programa

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