COBOL - Comando READ - www.cadcobol.com.br



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF.

READ
O comando READ é usado para ler um registro de um arquivo.

A leitura de registro está carregada nos níveis 01 (descrição de registro) seguindo a FD (descrição de arquivo) associada com o arquivo.
Se a frase INTO for incluída, o registro lido também será copiado no item de dados do INTO.
WITH LOCK só é requerido para que o registro seja locado (nenhum acesso por outros usuários ou processos serão permitidos).
A leitura com WITH NO LOCK os registros estarão liberados (DEFAULT).

Há dois formatos diferentes que são usados para dois tipos diferentes de leituras e são descritos abaixo:

O primeiro formato executa uma leitura sequencial do arquivo.
Se a última operação executada em um arquivo era um OPEN, o primeiro registro do arquivo é lido.
Se a operação prévia era uma READ, o próximo registro sequencial no arquivo é lido.
Se ao fim de arquivo é chegado como resultado da leitura, nenhum registro é devolvido e o código entre AT END e NOT AT END, será executado.
Se ao fim do arquivo não é chegado, o código entre NOT AT END e END-READ, será executado.

O segundo formato executa uma leitura randômica do arquivo.
O registro que for igual ao valor atual da chave do arquivo, será lido.
Se o arquivo tiver chaves múltiplas, a chave desejada é especificada na cláusula KEY IS.
Se o arquivo tem chaves de múltiplas e a cláusula KEY IS é omitida, a chave primária do arquivo será usada.
Se nenhum registro igual existir, nenhum registro é devolvido e o código entre INVALID KEY e NOT INVALID KEY, será executado.
Se um registro for encontrado, o código entre NOT INVALID KEY e END-READ, será executado.


Formatos:

>/p>



file-name-1
Deve ser definido em uma entrada DATA DIVISION FD.

NEXT RECORD
Lê o próximo registro na sequência lógica de registros.
NEXT é opcional quando o modo de acesso é seqüencial e não tem efeito na execução da instrução READ.
Você deve especificar a frase NEXT RECORD para recuperar registros seqüencialmente de arquivos no modo de acesso dinâmico.

INTO identifier-1
identifier-1 é o campo de recebimento.
O identifier-1 deve ser um campo de recebimento válido para a entrada da descrição do registro de envio selecionada, de acordo com as regras da instrução MOVE.

As áreas de registro associadas ao nome do file-name-1 e ao identifier-1 não devem ser a mesma área de armazenamento.

Quando há apenas uma descrição de registro associada ao nome do file-name-1 ou todos os registros e o item de dados referenciado pelo identifier-1 descreve um item alfanumérico elementar ou um item de grupo alfanumérico, o resultado da execução de uma instrução READ com o INTO é equivalente à aplicação das seguintes regras na ordem especificada:
  • A execução da mesma instrução READ sem a frase INTO.
  • O registro atual é movido da área de registro para a área especificada pelo identifier-1 de acordo com as regras da instrução MOVE sem a frase CORRESPONDING.
    O tamanho do registro atual é determinado pelas regras especificadas para a cláusula RECORD.
    Se a entrada de descrição do arquivo contiver uma cláusula RECORD IS VARYING, a movimentação implícita será uma movimentação de grupo.
    A instrução MOVE implícita não ocorre se a execução da instrução READ não tiver êxito.
    Qualquer assinatura ou modificação de referência associada ao identifier-1 é avaliada após a leitura do registro e imediatamente antes de ser movida para o item de dados.
    O registro está disponível na área de registro e no item de dados referenciado pelo identifier-1 .
    O identifier-1 não deve ser um item de grupo de comprimento dinâmico ou um item elementar de comprimento dinâmico.
Quando há várias descrições de registro associadas ao nome do file-name-1 e nem todas descrevem um item de grupo alfanumérico ou item alfanumérico elementar, as seguintes regras se aplicam:
  1. Se o arquivo referenciado por file-name-1 for descrito como contendo registros de tamanho variável ou como um arquivo QSAM com RECORDING MODE 'S' ou 'U', ocorrerá uma mudança de grupo.
  2. Se o arquivo referenciado por file-name-1 for descrito como contendo registros de tamanho fixo, uma movimentação ocorrerá de acordo com as regras de uma instrução MOVE, utilizando, como descrição do campo de envio, o registro que especifica o maior número de posições de caracteres .
    Se existir mais de um registro desse tipo, o registro do campo de envio selecionado será aquele entre os registros que aparecerem primeiro na descrição do file-name-1 .

KEY IS
A frase KEY IS pode ser especificada apenas para arquivos indexados.
data-name-1 deve identificar uma chave de registro associada ao file-name-1 .
data-name-1 pode ser qualificado; não pode ser subscrito.

AT END
Para acesso seqüencial, a frase AT END e um procedimento EXCEPTION / ERROR aplicável podem ser omitidos.

INVALID KEY
A frase INVALID KEY e um procedimento EXCEPTION / ERROR aplicável podem ser omitidos.

END-READ
Esse terminador de escopo explícito serve para delimitar o escopo da instrução READ.
END-READ permite que uma instrução READ condicional seja aninhada em outra instrução condicional.
END-READ também pode ser usado com uma declaração READ imperativa.