sábado, 12 de novembro de 2016

Trabalhando com arquivos - Parte 2.1 - Código leitura arquivo

Olá!

Para não produzir um post extenso, o assunto sobre arquivos está abordado em posts particionados conforme:
  1. Declarações básicas
  2. Código básico
    1. Código leitura arquivo
    2. Código escrita arquivo
    3. Código leitura/escrita no mesmo arquivo
  3. Código intermediário:
    1. Balance-Line conceito
    2. Balance-Line código
Neste post é abordado os comandos e uma lógica de processamento simples para realizar a leitura dos dados de um arquivo. Lembrando, que na parte 1 desse assunto foi apresentado as declarações básicas que devem ser feitas para executar uma rotina COBOL com arquivos.

O fluxo de processamento consiste em três passos: abrir o arquivo em modo de leitura, ler o registro do arquivo e encerrar o uso do arquivo (fechar o arquivo). De modo que o passo de ler o registro do arquivo deve estar em um laço de repetição.


    1 - Abrir o arquivo em modo de leitura

Quando a abertura de um arquivo é feita modo de leitura, significa que as informações que estão contidas no arquivo serão passadas para o COBOL, ou seja, os dados do arquivo serão lidos e manipulados pelo programa COBOL.

A sintaxe do comando para abrir o arquivo em modo de leitura, é :
OPEN INPUT nome-logico-arquivo.

Exemplo: OPEN INPUT ARQUIVO-ENTRADA.


    2 - Ler os dados do arquivo

Após ter feito a abertura do arquivo com OPEN INPUT, o arquivo está pronto para ser lido. E com o comando READ é que é feita a leitura dos dados do arquivo. Sintaxe:
READ nome-logico-arquivo.

Exemplo: READ ARQUIVO-ENTRADA.



    3 - Encerrar o uso do arquivo


Com o fim da leitura ou processamento dos dados do arquivo, é uma boa prática executar o comando CLOSE para fechar o arquivo (encerrar a sessão). Caso, algum arquivo aberto não seja fechado com este comando, então após a execução completa do programa todos arquivos ainda abertos serão fechados. Sintaxe:
CLOSE nome-logico-arquivo.

Exemplo: CLOSE ARQUIVO-ENTRADA.



  • Exemplo prático de programa
Então com os comando Open Input, Read e Close, podemos criar um fluxo simples e eficaz para a leitura de um arquivo sequencial.

Considerando que o arquivo a ser lido contem as informações de pessoas e cada registro possui os dados dispostos da seguinte forma: o nome com no máximo 20 caracteres; sobrenome com no máximo 40 caracteres; data de nascimento no formato dd/mm/aaaa. Abaixo está apresentado os dados de exemplo do arquivo-entrada.txt, que contem 5 registros:

Felipe   Barbosa Ferreira         19/02/1992
Ana      Vieira                   02/04/1988
Joao     Santos                   03/05/1995
Aline    Silva                    14/08/1985
Maira    Dantas                   27/12/1976

Assim o layout deste arquivo é:


      * -- Descricao do arquivo de entrada
       FD ARQUIVO-ENTRADA.
      *
      * Layout do arquivo: ARQUIVO-ENTRADA
       01 ARQUIVO-ENTRADA-REG.
           03 ARQ-ENTD-NM-PSS           PIC  X(020).
           03 ARQ-ENTD-NM-PSS-SNM       PIC  X(040).
           03 ARQ-ENTD-DT-PSS-NSC       PIC  X(010).

E o laço de repetição para ler os registros do arquivo:

      * -- Loop para ler os registros do arquivo
           PERFORM UNTIL FIM-ARQ
               PERFORM 100000-LER-ARQUIVO-ENTRADA
      *
      * --     Mostra o conteudo lido
               DISPLAY 'Registro.......: ' QT-REG-LER-ARQ-ENTD
               DISPLAY 'Nome...........: ' ARQ-ENTD-NM-PSS
               DISPLAY 'Sobrenome......: ' ARQ-ENTD-NM-PSS-SNM
               DISPLAY 'Data nascimento: ' ARQ-ENTD-DT-PSS-NSC
               DISPLAY '.'
           END-PERFORM.

Neste caso quando, o programa tentar ler o sexto registro será retornado file status igual a 10, indicando fim de arquivo, pois o sexto registro não existe. Deste modo FIM-ARQ se torna verdadeiro e o laço de repetição de leitura termina. E por fim o arquivo é encerrado.

Ver o código completo do programa de exemplo

O resultado da execução da rotina, é:

Registro.......: 000000001
Nome...........: Felipe
Sobrenome......: Barbosa Ferreira
Data nascimento: 19/02/1992
.
Registro.......: 000000002
Nome...........: Ana
Sobrenome......: Vieira
Data nascimento: 02/04/1988
.
Registro.......: 000000003
Nome...........: Joao
Sobrenome......: Santos
Data nascimento: 03/05/1995
.
Registro.......: 000000004
Nome...........: Aline
Sobrenome......: Silva
Data nascimento: 14/08/1985
.
Registro.......: 000000005
Nome...........: Maira
Sobrenome......: Dantas
Data nascimento: 27/12/1976

Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA

Até o próximo post!

Nenhum comentário:

Postar um comentário