Pular para o conteúdo principal
Módulo 5 · Lição 2 de 210/10 no curso~15 min
Lições do módulo (2/2)

Operações de E/S de arquivo

Depois que um arquivo for associado e declarado em DATA DIVISION, podemos manipulá-lo dentro de PROCEDURE DIVISION. No COBOL, o gerenciamento do ciclo de vida dos arquivos segue um fluxo imperativo padrão: abrir, executar operações (leitura ou gravação) e fechar.


1. Abrindo arquivos: a instrução OPEN

Antes de poder ler ou gravar em um arquivo, ele deve ser aberto especificando o modo de acesso apropriado:

COBOL
       OPEN INPUT SALES-FILE.

Os principais modos são:

  • INPUT: O arquivo é aberto em modo somente leitura. O arquivo deve existir no disco, caso contrário o programa falhará.
  • OUTPUT: O arquivo é aberto em modo de gravação. Se o arquivo já existir, seu conteúdo anterior será excluído (sobrescrever). Se não existir, é criado.
  • EXTEND: O arquivo é aberto para anexar dados. Novos registros serão gravados a partir do final do arquivo existente.
  • I-O: O arquivo é aberto para leitura e gravação (usado principalmente para arquivos de acesso relativo ou indexado, não para arquivos sequenciais lineares).

2. Leitura de dados: a instrução READ

Para ler um registro de um arquivo sequencial, usamos a instrução READ. Como não sabemos antecipadamente quantos registros o arquivo contém, devemos sempre tratar a condição de fim de arquivo (EOF) usando a cláusula AT END:

COBOL
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE: Observe que a instrução faz referência ao nome do arquivo lógico (definido nas cláusulas SELECT e FD), não ao nome do registro.
  • AT END: Especifica as instruções a serem executadas quando você tenta ler o último registro disponível. Normalmente, você define uma variável de sinalização (como WS-EOF) como "Y".
  • END-READ: encerra explicitamente a instrução de leitura.

3. Gravando dados: a instrução WRITE

Para inserir dados em um arquivo, usamos a instrução WRITE.

[!AVISO] Em COBOL, você lê um arquivo (READ SALES-FILE), mas escreve um registro (WRITE SALES-RECORD). Escrever WRITE SALES-FILE é um erro de sintaxe comum que impedirá a compilação.

COBOL
       MOVE 1001 TO EMP-ID.
       MOVE "MARIO ROSSI" TO EMP-NAME.
       WRITE SALES-RECORD.

Antes de executar a instrução WRITE, os campos subordinados da estrutura de registros FD (neste caso, SALES-RECORD) devem ser preenchidos na memória.


4. Fechando Arquivos: A Instrução CLOSE

Quando o processamento for concluído, todos os arquivos abertos deverão ser fechados para liberar recursos do sistema e garantir que todos os dados sejam gravados no disco:

COBOL
       CLOSE SALES-FILE.

Observe que a instrução CLOSE usa o nome do arquivo lógico como argumento, não o nome do registro.


Experimente

Exercício#cobol.m5.l2.e1
Tentativas: 0Carregando…

Conclua o PROCEDURE DIVISION abrindo SALES-FILE no modo INPUT, lendo o primeiro registro e definindo a variável de controle WS-EOF como 'Y' quando o final do arquivo for atingido. Finalmente, lembre-se de fechar o arquivo antes de parar.

Carregando editor…
Mostrar dica

Escreva na ordem: ABRIR ARQUIVO DE VENDAS DE ENTRADA. então LEIA O ARQUIVO DE VENDAS NO FINAL MOVE 'Y' PARA WS-EOF END-READ. em seguida, FECHE O ARQUIVO DE VENDAS. e finalmente PARE DE EXECUÇÃO.

Solução disponível após 3 tentativas

Exercício#cobol.m5.l2.e2
Tentativas: 0Carregando…

Conclua a PROCEDURE DIVISION abrindo SALES-FILE no modo OUTPUT. Mova o valor 1001 para SALES-ID e 250,50 para SALES-AMOUNT e, em seguida, grave o SALES-RECORD no arquivo. Finalmente, feche o arquivo antes de parar o programa.

Carregando editor…
Mostrar dica

Abra o arquivo com OPEN OUTPUT SALES-FILE., use MOVE para atribuir valores a SALES-ID e SALES-AMOUNT, execute WRITE SALES-RECORD. (escrevendo o registro, não o arquivo!), feche com CLOSE SALES-FILE. e termine com STOP RUN.

Solução disponível após 3 tentativas