COBOL - Método de acesso ao arquivo
Cada organização de arquivos (em nossa seção anterior, discutimos muitas organizações de arquivos) tem diferentes modos de acesso.
O modo de acesso é usado para definir a forma de acesso ao arquivo com base nos requisitos do programa. Em suma, podemos dizer que o modo de acesso define como os dados são necessários para ler e gravar no arquivo.
Existem 3 modos de acesso,
- Acesso Sequencial
- Acesso aleatório
- Acesso dinâmico
Agora, veremos como definir um arquivo em COBOL com o modo de acesso correto,
Syntax:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT [OPTINAL] filename ASSIGN TO ddname.
ORGANIZATION IS {SEQUENTIAL/INDEXED/RELATIVE}.
[ACCESS IS {SEQUENTIAL/RANDOM/DYNAMIC}].
[RECORD KEY IS ws-key].
[RELATIVE KEY IS ws-rel-rrn].
[ALTERNATE RECORD KEY IS ws-key {WITH/WITHOUT} DUPLICATES].
[FILE STATUS IS ws-status].
|
Vejamos cada modo de acesso abaixo,
Acesso sequencial:
Como o nome indica, os registros no arquivo podem ser lidos sequencialmente para o acesso sequencial, ou seja, um após o outro desde o início.
O método para recuperar o registro varia de acordo com a organização de arquivos escolhida.
Nos
acesso sequencial, os registros são recuperados da mesma forma que foram inseridos.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
|
Para
arquivos indexados, os registros são acessados na ordem do arquivo de chave selecionado, começando na posição atual do indicador de posição do arquivo.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name
ORGANIZATION IS INDEXED
ACCESS MODE IS SEQUENTIAL
RECORD KEY IS rec-key1
ALTERNATE RECORD KEY IS rec-key2.
|
Para
arquivos relativos, os registros são acessados na ordem do número do registro relativo.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name
ORGANIZATION IS RELATIVE
ACCESS MODE IS SEQUENTIAL
RELATIVE KEY IS rec-key1. |
Desvantagens do modo de acesso sequencial:
O modo de acesso sequencial é muito eficaz quando o arquivo possui menos registros, mas quando o arquivo possui um grande número de registros, levará muito tempo para ler um registro específico do arquivo.
Acesso aleatório:
No modo de acesso aleatório, podemos acessar os registros aleatoriamente, ou seja, diretamente fornecendo a chave.
Esse modo de acesso geralmente é usado apenas para arquivos indexados e relativos.
Para
arquivos indexados, os registros são recuperados de acordo com o valor que você coloca em um campo-chave. O valor pode ser primário, alternativo ou relativo. Pode haver um ou mais índices alternativos.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS rec-key1
ALTERNATE RECORD KEY IS rec-key2. |
Os registros são recuperados para
arquivos relativos com base no valor que você colocou na chave relativa.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name
ORGANIZATION IS RELATIVE
ACCESS MODE IS RANDOM
RELATIVE KEY IS rec-key1. |
Acesso dinâmico:
No mesmo programa, o acesso dinâmico permite acesso sequencial e aleatório. No modo de acesso dinâmico, podemos usar uma descrição de arquivo para ambos os tipos de processamento, ou seja, processamento aleatório e sequencial, como recuperar alguns registros com a ajuda de chaves e alguns registros em ordem sequencial.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS DYNAMIC
RECORD KEY IS rec-key1
ALTERNATE RECORD KEY IS rec-key2. |
Com arquivos relativos e indexados, o modo de acesso dinâmico permite alternar entre o modo de acesso aleatório e o modo de acesso sequencial ao ler um arquivo usando a frase NEXT na instrução READ.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT file-name ASSIGN TO dd-name
ORGANIZATION IS RELATIVE
ACCESS MODE IS DYNAMIC
RELATIVE KEY IS rec-key1. |