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:
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:
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áusulasSELECTeFD), 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 (comoWS-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). EscreverWRITE SALES-FILEé um erro de sintaxe comum que impedirá a compilação.
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:
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
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.
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
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.
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