
Um arquivo externo é um arquivo que não pertence a um Banco de Dados OpenBASE. Pode ser criado pelo OpenBASE ou outro programa qualquer.
A linguagem OPUS permite leituras e atualizações de registros em arquivos externos ao OpenBASE. Aos arquivos externos não criados pela OPUS, esta só permite acesso seqüencial para leitura desses arquivos.
Arquivos externos são definidos pela OPUS através de micro-esquemas, que correspondem à estrutura da área de dados do arquivo. A área reservada para cada item do arquivo é identificada pela OPUS por um nome em relação ao deslocamento e tamanho deste item no registro.
Para realizar-se operações sobre um arquivo externo, deve-se especificar o nome do micro-esquema após o comando USE ou definir a estrutura do arquivo dentro do próprio programa fonte OPUS. Desta forma, o micro-esquema é compilado pela OPUS e seus itens são declarados como variáveis locais.
Um micro-esquema pode ser definido em um arquivo texto (USE <arquivo>) ou pode ser definido dentro do programa fonte (USE *).
Numa aplicação, caso o arquivo externo referenciado em um micro-esquema não exista, ele será criado automaticamente, no momento da execução do programa.
A primeira linha descreve o arquivo externo e deve conter as seguintes informações:
<nome> <tipo> LEN (<tamanho>) [<modo>] [EXCLUSIVE] [MAXCAB] [BITS64]
Onde:
<nome> pode ser:
<tipo> representa o tipo do arquivo externo.
Estes tipos de arquivos possuem um tamanho de registro variável e todo registro deve terminar com um caractere de nova linha (NL = \n). São excluídos os brancos à direita.
O tipo L não permite a alteração no tamanho do registro em comandos CHANGE. Nos comandos DELETE, os registros são preenchidos com DELFLG (-1). A inclusão de registros é feita no final do arquivo com o comando APPEND.
O tipo M permite a alteração de registros em comandos CHANGE, pois cria-se um novo arquivo. Pela mesma razão, os comandos DELETE excluem efetivamente os registros do arquivo e o comando INSERT permite inserir registros no meio do arquivo. Não deve ser usado em arquivos grandes porque todo o arquivo é copiado e regravado a cada comando.
Este tipo de arquivo tem tamanho de registro fixo e não contém o caractere de nova linha.
Este tipo de arquivo tem estrutura proprietária da linguagem OPUS e seu primeiro item deve ser o item chave. Não permite duplicidade de valores para chave (chave única).
O arquivo pode ocupar no maximo 16.777.215 bytes.
Com a opção MAXCAB o arquivo pode ocupar 4.294.967.295 bytes (4 GB)
Este tipo de arquivo tem tamanho de registro fixo e todo registro deve terminar com um caractere de nova linha (NL = \n).
Este tipo de arquivo tem estrutura proprietária da linguagem OPUS e seu primeiro item deve ser o item chave. Não permite duplicidade de valores para chave (chave única).
<tamanho> representa o tamanho total do registro (tamanho do maior registro).
<modo> representa o modo para utilização do arquivo.
Pode ser:
Por omissão é assumido INPUT / OUTPUT.
EXCLUSIVE
determina exclusividade de utilização do arquivo. Só para arquivos indexados.
MAXCAB
Sem a opção MAXCAB (default) o arquivo pode ter no maximo 16.777.215 registros ocupando no maximo 4.294.967.295 bytes (4 GB)BITS64
Com a opção BITS64 o arquivo pode ter no máximo 9.223.372.036.854.775.807 bytesNotas:
As linhas subseqüentes não vazias descrevem os campos do registro e devem conter as seguintes informações, como mostra a Sintaxe
<item> <tipo_tamanho> [POS <número>] [KEY]
Onde:
<item> |
Representa o nome do campo do arquivo. Deve se iniciar por letra, ter no máximo 12 caracteres e não ter duplicata. |
|
<tipo_tamanho> |
Representa o tipo e o tamanho do item. |
|
POS <número> |
Informa a posição inicial do item no registro, permitindo redefinição de itens. Todo registro começa na posição 1. Um campo pode redefinir outro, isto é, possuir posições comuns no registro. No programa que utilizar os campos, estes serão vistos como variáveis distintas. Por este motivo, na inclusão de registros, os campos que redefinem outros devem ser ignorados. |
|
KEY |
Determina que o campo será a chave única de arquivo indexado. |
Utiliza-se um editor de textos, e segue-se a sintaxe descrita anteriormente.
Exemplo 1
Neste exemplo criaremos um arquivo seqüencial de nome ag_tel de tamanho 89. Note que o tamanho é o somatório do tamanho de todos os campos. Nome do micro-esquema agenda_tel.d.
ag_tel S LEN(89)
nome U20
tele U14
ende U50
cep N05
Exemplo 2
Neste exemplo criaremos um arquivo indexado de nome /usr/arq/empresas onde a chave será o campo com o CGC da empresa. Nome do micro-esquema: empresas.d.
/usr/arq/empresas I LEN(104)
emp_cgc N14 KEY
emp_nom U50
emp_rua U25
emp_num N08
emp_cep N05
emp_uf U02
emp_end U40 POS 64
Exemplo 3
Neste exemplo criaremos um arquivo temporário com a estrutura do arquivo descrito no primeiro exemplo. Nome do micro-esquema: tmp_agtel.d.
# S LEN(89)
nome U20
tele U14
ende U50
cep N05
Exemplo 4
Podemos definir vários arquivos externos em um único micro-esquema (biblioteca de micro-esquemas). Utilizaremos os exemplos anteriores para demonstrar este recurso. Neste caso utiliza-se o editor de textos para criar a biblioteca e para identificar cada módulo (micro-esquema). Utiliza-se o caractere % (percentual), que deve ser o primeiro caractere da linha, seguido do nome do micro-esquema.
Exemplo
Nome da biblioteca bib_est.d.
%ag_tel
ag_tel S LEN(89)
nome U20
tele U14
ende U50
cep N05
%empresas
/usr/arq/empresas I LEN(104)
emp_cgc N14 KEY
emp_nom U50
emp_rua U25
emp_num N08
emp_cep N05
emp_uf U02
emp_end U40 POS 64
%tmp_agtel
# S LEN(89)
nome U20
tele U14
ende U50
cep N05
