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
|