Olá!
Para não produzir um post extenso, o assunto sobre arquivos está abordado em posts particionados conforme:
- Declarações básicas
- Código básico
- Código intermediário:
O exemplo de código COBOL para representar o banlace-line de arquivos, consiste em ler dois arquivos e realizar a geração de um terceiro arquivo.
Sendo que no arquivo-A estão os registros de movimentação das pessoas no dia, assim, este arquivo pode possuir o registro de novas ou de pessoas que já possuam cadastro. E no segundo arquivo-B estão os registros (pessoas) que já estão gravados na base de dados. O terceiro arquivo-C é gerado no final do dia para apontar a quantidade de novas pessoas que foram cadastradas no banco de dados.
Então para realizar a leitura dos arquivos A e B será utilizado basicamente o conteúdo parte 2.1, e para a geração do arquivo C o conteúdo da parte 2.2. Também adicionando um laço de repetição para ler cada registro dos arquivos A e B e realizar a verificação se o registro do arquivo B é uma nova pessoa, se for uma nova pessoa gravar os dados desse registro no arquivo C.
Obs: será apresentado as principais partes do código do programa COBOL, no final do post há o link para visualizar o código do programa completo.
Sendo que no arquivo-A estão os registros de movimentação das pessoas no dia, assim, este arquivo pode possuir o registro de novas ou de pessoas que já possuam cadastro. E no segundo arquivo-B estão os registros (pessoas) que já estão gravados na base de dados. O terceiro arquivo-C é gerado no final do dia para apontar a quantidade de novas pessoas que foram cadastradas no banco de dados.
Então para realizar a leitura dos arquivos A e B será utilizado basicamente o conteúdo parte 2.1, e para a geração do arquivo C o conteúdo da parte 2.2. Também adicionando um laço de repetição para ler cada registro dos arquivos A e B e realizar a verificação se o registro do arquivo B é uma nova pessoa, se for uma nova pessoa gravar os dados desse registro no arquivo C.
Obs: será apresentado as principais partes do código do programa COBOL, no final do post há o link para visualizar o código do programa completo.
- A declaração dos arquivos
*
*----------------------------------------------------------------*
INPUT-OUTPUT SECTION.
*----------------------------------------------------------------*
*
FILE-CONTROL.
* -- Arquivo de saida/resposta
SELECT arquivoC ASSIGN TO 'C:\workspace\arquivo-C.txt'
FILE STATUS IS IN-FILE-EST-arquivoC.
*
* -- Arquivo de leitura
SELECT arquivoA ASSIGN TO 'C:\workspace\arquivo-A.txt'
FILE STATUS IS IN-FILE-EST-arquivoA.
*
* -- Arquivo de leitura
SELECT arquivoB ASSIGN TO 'C:\workspace\arquivo-B.txt'
FILE STATUS IS IN-FILE-EST-arquivoB.
*
******************************************************************
DATA DIVISION.
******************************************************************
*
*----------------------------------------------------------------*
FILE SECTION.
*----------------------------------------------------------------*
*
* -- Arquivo de resposta
FD arquivoC
LABEL RECORD STANDARD
BLOCK 0
RECORD 14
RECORDING F.
*
* Layout do arquivo arquivoC
01 REGISTRO-ARQ-C.
03 CD-PESSOA-C PIC 9(004).
03 NOME-C PIC X(010).
*
* -- Arquivo de leitura
FD arquivoA
LABEL RECORD STANDARD
BLOCK 0
RECORD 14
RECORDING F.
*
* Layout do arquivo arquivoA
01 REGISTRO-ARQ-A.
03 CD-PESSOA-A PIC 9(004).
03 NOME-A PIC X(010).
*
* -- Arquivo de leitura
FD arquivoB
LABEL RECORD STANDARD
BLOCK 0
RECORD 14
RECORDING F.
*
* Layout do arquivo arquivoB
01 REGISTRO-ARQ-B.
03 CD-PESSOA-B PIC 9(004).
03 NOME-B PIC X(010).
- O processamento inicial do programa
Primeiro temos que abrir os arquivos A e B em modo de leitura, se está ação for sucedida, o processo de leitura se iniciará.
*
*-----------------------------------------------------------------
000000-ROTINA-PRINCIPAL SECTION.
*-----------------------------------------------------------------
*
* -- Abre os arquivos
PERFORM 100000-ABRE-ARQ.
*
* -- Realiza a leitura dos arquivos e grava
* os dados no arquivo de resposta
PERFORM 200000-LER-ARQ-GRV-RPST.
*
* -- Procedimento final para apresentar o resumo do processamento
PERFORM 300000-RSM-PRCT-PGM.
*
000000-FIM.
GOBACK.
- A abertura dos arquivos
Veja que o arquivo C não é aberto no processamento inicial, pois se não haver registro no arquivo A ou B não será produzido o arquivo C.
*
*----------------------------------------------------------------*
100000-ABRE-ARQ SECTION.
*----------------------------------------------------------------*
*
* -- Abre os arquivos de entrada/leitura
OPEN INPUT arquivoA
arquivoB.
*
* -- Verifica a execucao da aberura do arquivo A
IF IN-FILE-EST-arquivoA NOT EQUAL '00'
PERFORM 999001-ERRO-01
END-IF.
*
* -- Movimentacao para indicar que o arquivo esta aberto
MOVE 'S' TO IN-ABERTO-ARQ-A.
*
* -- Verifica a execucao da aberura do arquivo B
IF IN-FILE-EST-arquivoB NOT EQUAL '00'
PERFORM 999002-ERRO-02
END-IF.
*
* -- Movimentacao para indicar que o arquivo esta aberto
MOVE 'S' TO IN-ABERTO-ARQ-B.
*
100000-FIM.
EXIT.
*
*----------------------------------------------------------------*
110000-ABRE-ARQ-RPST SECTION.
*----------------------------------------------------------------*
*
* -- Abre o arquivo de saida para gravacao
OPEN OUTPUT arquivoC.
*
* -- Verifica a execucao da aberura do arquivo C
IF IN-FILE-EST-arquivoC NOT EQUAL '00'
PERFORM 999005-ERRO-05
END-IF.
*
* -- Movimentacao para indicar que o arquivo esta aberto
MOVE 'S' TO IN-ABERTO-ARQ-C.
*
110000-FIM.
EXIT.
*
- O Balance-line
Agora é iniciado o processo de leitura e gravação dos dados no arquivo C. Sendo:
1 - Ler o arquivo A e B, se não haver registro em um destes arquivos é indicado fim de arquivo
2 - Se não for fim de arquivo, ou seja, há registros nos arquivos A e B, é realizado a abertura do arquivo C em modo de gravação
3 - É realizado o laço de repetição para a leitura dos registros e realizar a verificação dos dados, onde:
3.1 - Se a chave da pessoa do arquivo A e B forem iguais, os registros serão ignorados, pois a pessoa já está cadastrado no banco de dados
3.2 - Quando a chave da pessoa do arquivo A for menor que do arquivo B, significa que o registro é de uma nova pessoa e deve ser gravado no arquivo C
3.3 - Quando a chave da pessoa do arquivo A for maior que do arquivo B, deve ser realizada a leitura do próximo registro do arquivo B
4 - Ao terminar o laço de repetição, o balane line está encerrado, assim será feito o fechamento dos arquivos
Veja o código:
*
*----------------------------------------------------------------*
200000-LER-ARQ-GRV-RPST SECTION.
*----------------------------------------------------------------*
*
* -- Leitura do primeiro registro do arq
PERFORM 970000-LER-ARQ-arquivoA.
*
* -- Leitura do primeiro registro do arq
PERFORM 971000-LER-ARQ-arquivoB.
*
* -- Abre o arquivo de resposta em modo de gravacao
IF NOT FIM-ARQ
PERFORM 110000-ABRE-ARQ-RPST
END-IF.
*
* -- Se tiver registros, continua o processamemto (entra no IF)
IF NOT FIM-ARQ
*
* -- Loop para balance-line entre os dois arq de leitura
PERFORM UNTIL FIM-ARQ
*
EVALUATE TRUE
*
* -- Situacao que ignora os dos dados dos arquivos
WHEN CD-PESSOA-A = CD-PESSOA-B
PERFORM 970000-LER-ARQ-arquivoA
PERFORM 971000-LER-ARQ-arquivoB
*
* -- Situacao para realizar a gravacao dos dados no
* -- arquivo de resposta
WHEN CD-PESSOA-A < CD-PESSOA-B
PERFORM 400000-GRAVA-DADO-ARQ
PERFORM 970000-LER-ARQ-arquivoA
*
WHEN IN-LER-FIM-ARQ-A EQUAL 'N'
AND IN-LER-FIM-ARQ-B EQUAL 'S'
PERFORM 400000-GRAVA-DADO-ARQ
PERFORM 970000-LER-ARQ-arquivoA
*
* -- Situacao para ler proximo reg arquivob
WHEN CD-PESSOA-A > CD-PESSOA-B
PERFORM 971000-LER-ARQ-arquivoB
*
* -- Situacao nao prevista, erro
WHEN OTHER
PERFORM 999007-ERRO-07
END-EVALUATE
*
END-PERFORM
END-IF.
*
* -- Fecha os arquivos
PERFORM 900000-FECHA-ARQ.
*
200000-FIM.
EXIT.
Para, melhor definir a estrutura dos arquivos, veja cada arquivo abaixo:
Após a execução do código apresentado com os arquivos A e B conforme acima, é gerada a seguinte resposta:
Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA
FELIPE BARBOSA FERREIRA
Até o próximo post!
Nenhum comentário:
Postar um comentário