COBOL - MERGE - Classificação interna



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

COBOL - MERGE - Classificação interna

Instrução MERGE em um programa COBOL.
Vimos em outros artigos como fazer um MERGE em um JCL.
Neste artigo, veremos como fazer isso em um programa cobol.
Utilitário? Depende.
A verdade é que poder fazer isso por JCL, não vejo razão para fazê-lo em um programa.
Mas quem sabe!
Talvez alguns dos leitores possam nos dar uma idéia de seu uso prático.

MERGE:

A instrução MERGE em cobol serve para juntar dois arquivos levando em consideração a chave pela qual eles são ordenados.
Ou seja, não podemos fazer um MERGE de arquivos bagunçados.
O que ele fará é "colocar" as chaves correspondentes juntas no arquivo de saída.
Para o exemplo, usaremos:
2 arquivos de entrada com os dados a serem unidos.
1 arquivo temporário onde ocorrerá o MERGE.

Os dados dos arquivos de entrada para nosso exemplo serão:

ARQUIVO1:
A
B
C

ARQUIVO2:
B
C
E

 IDENTIFICATION DIVISION.
 PROGRAM-ID.PRGMERGE.

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

 INPUT-OUTPUT SECTION. 
 FILE-CONTROL.

* Definição dos arquivos

 SELECT TABELA-MERGE    ASSIGN TO DISK 'SORTWORK'.
 SELECT TABELA-ARQUIVO1 ASSIGN TO ARQUIVO1.
 SELECT TABELA-ARQUIVO2 ASSIGN TO ARQUIVO2.

 DATA DIVISION.
 FILE SECTION.

* Arquivos físicos

 FD  TABELA-ARQUIVO1
     DATA RECORD IS ARQUIVO1.

 01  ARQUIVO1.
     05 FILLER                 PIC X(001).

 FD  TABELA-ARQUIVO2
     DATA RECORD IS ARQUIVO2.

 01  ARQUIVO2.
     05 FILLER                 PIC X(001).

* Arquivo temporário

 SD  TABELA-MERGE
     DATA RECORD IS ELEMENTO-MERGE.

 01  ELEMENTO-MERGE.
     05 MERGE-CHAVE1           PIC X(001).

 WORKING-STORAGE SECTION.

* Variável onde salvaremos o resultado do MERGE

 01  VARIABLES.
     05 WA-REGISTRO.
        10 WA-AUX-CHAVE1       PIC X(001).

* Switches para loop

 01  SWITCHES.
     05 SW-FIM-TABELA-MERGE    PIC X(001).
        88 SI-FIM-TABELA-MERGE VALUE 'S'.
        88 NO-FIM-TABELA-MERGE VALUE 'N'.

* Registro de dados após MERGE

 01  WR-ELEMENTO-MERGE.
     05 WR-MERGE-CHAVE1        PIC X(001).

 PROCEDURE DIVISION.

     PERFORM 1000-INICIO
     PERFORM 2000-PROCESSO
     PERFORM 9000-FINAL
     .

 1000-INICIO.

     INITIALIZE VARIABLES
     .

 2000-PROCESSO.

* Instrução MERGE 
* Unimos FILE1 e FILE2 em TABLE-MERGE por chave 
* MERGE-CHAVE1

     MERGE TABELA-MERGE ASCENDING KEY MERGE-CHAVE1
           USING ARQUIVO1 ARQUIVO2
           OUTPUT PROCEDURE 2100-PROCESSO-SAIDA

* Em OUTPUT PROCED usaremos as informações já reunidas

     IF SORT-RETURN NOT = ZEROS
        DISPLAY 'ERROR EN EL MERGE:' SORT-RETURN
     END-IF
     .

 2100-PROCESSO-SAIDA.

* Passamos do arquivo temporário para o registro de saída com a
* instrução RETURN 
* Exibimos as informações de uma variável definida no programa

     SET NO-FIM-TABELA-MERGE TO TRUE

     PERFORM UNTIL SI-FIN-TABLA-UNION
        RETURN TABELA-MERGE INTO WR-ELEMENTO-MERGE
                AT END
                SET SI-FIM-TABELA-MERGE TO TRUE
                NOT AT END
                MOVE WR-MERGE-CHAVE1 TO WA-AUX-CHAVE1
                DISPLAY 'REGISTRO-> ' WA-REGISTRO
        END-RETURN
     END-PERFORM
     .

 9000-FINAL.

     STOP RUN
     .

RESULTADO:

REGISTRO-> A
           B
           B
           C
           C
           E

Nota:
mesmo que você não veja nenhum parágrafo de "abrir arquivo", "ler arquivo", etc., não significa que perdemos o FOCO, é que não é necessário!


© Copyright Consultorio cobol