Você está na página 1de 5

Balance Line Código

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 leitura arquivo
Código escrita arquivo
Código leitura/escrita no mesmo arquivo
Código intermediário:
Balance-Line conceito
Balance-Line código

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.

A declaração dos arquivos

Note que os três arquivos possuem o mesmo layout, isso é somente para facilitar a
leitura do código de exemplo. Pois, por exemplo o arquivo A poderia ter mais
informações que o arquivo B, e o arquivo C somente o nome dos novos registros,
deste modo gerando layout diferente para os 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:

felipe barbosa ferreira - arquivos balance line

Após a execução do código apresentado com os arquivos A e B conforme acima, é


gerada a seguinte resposta:
felipe barbosa ferreira - resposta balance line

Para Ctrl + C do código acesse aqui.


Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA

Você também pode gostar