Capítulo 16 Formato e Conversão de Arquivos |
Durante a utilização de um sistema é comum que alterações na estrutura de seus arquivos se façam necessárias, tanto para atender a novos requisitos como para refinar os antigos. Caso um arquivo, que já contenha dados, sofra uma das modificações listadas abaixo, o projetista tem de comandar sua conversão para o novo formato. A execução da nova versão do sistema acusa a necessidade de conversão de algum arquivo que tenha modificação estrutural e não tenha sido convertido, exceto quando, por uma eventualidade, o tamanho total do arquivo em disco permaneça múltiplo exato do novo tamanho do registro.
|
As situações onde uma conversão é necessária são as seguintes:
Alteração em Tamanho de Campo Digitado Cadeia, Alteração em Campo Chave, Alteração em Largura ou Altura de Campo Texto, Passagem de Campo Digitado de Permanente para Não Permanente em memória e vice-versa, Troca de Tipo de Campo Digitado e Troca de Modo de Obtenção de Campo.
Comandar uma atualização global na sua base de dados ou Combinar os 2 métodos acima.
Alterar suas definições. Emitir nova documentação. Definir a sequência de conversões necessárias para adaptar a base de dados à nova definição. Criar um arquivo de lote (.BAT) com esta sequência. Levar este arquivo para o ambiente de produção, juntamente com os programas que ele requisitar Executar a conversão.
|
Para cada arquivo LANCE definido pelo projetista será criado um arquivo em disco, que conterá os campos declarados como residentes em memória e, opcionalmente, um segundo arquivo que conterá os campos não residentes em memória. O nome e a extensão destes arquivos corresponderá aos declarados pelo projetista no dicionário de dados para os equivalentes LANCE, sendo o nome truncado em 8 caracteres. O arquivo com os campos não residentes em memória terá adicionado ao seu nome o prefixo "_" (sublinhado).
Além destes, o projetista pode ainda definir um arquivo para cada um de seus campos Texto. Mesmo podendo armazenar mais de um campo Texto em um mesmo arquivo em disco, o projetista deve, sempre que possível, definí-los em arquivos individuais, para facilitar as conversões estruturais.
Somente os registros de um Arquivo ou um Parâmetro declarados como Não Temporários são armazenados em disco, com tamanhos de acordo com o Modo de Obtenção, Tipo e permanência ou não Na Memória de seus campos. Estes registros, independente da informação que eles contenham, têm sempre um tamanho fixo. O arquivo em disco terá o tamanho total calculado como uma mera multiplicação do tamanho pela quantidade de registros nele contidos. A descrição da estrutura de um arquivo se encontra no programa executável gerado pelo LANCE e, obviamente, também no dicionário de dados da aplicação.
O LANCE admite também a criação de arquivos que armazenam o resultado de uma ordenação.
|
Cada campo definido em um Arquivo ou Parâmetro ocupará tantos bytes quantos necessários para armazenar a informação correspondente ao tipo Pascal que a ele equivale.
![]()
|
ConvArq é o utilitário que converte os dados armazenados em um Arquivo ou Parâmetro LANCE para um novo formato, segundo uma lista de instruções, com a seguinte sintaxe:
ConvArq Arquivo.ext Instrução1 [... InstruçãoN] A conversão é recusada caso o tamanho total do Arquivo não seja múltiplo do tamanho do registro calculado em função das instruções informadas. Caso sejam compatíveis, o Arquivo com o formato antigo é renomeado para a extensão .BAK e um arquivo que conterá dados no novo formato é criado.
|
|
Nota | Ao final de sua execução o ConvArq coloca um código de erro na variável de sistema ErrorLevel (veja Help do DOS), que poderá ser testada em um arquivo de lote (.BAT), com o seguinte significado:
|
Nota | O projetista pode redirecionar a saída das mensagens para que elas não sejam exibidas no vídeo, utilizando >NUL como se fosse uma última instrução.
A sequência de instruções indica o que fazer em cada registro, através da manipulação de um ponteiro interno para o formato antigo (Antigo) e outro para o formato novo (Novo). Cada instrução tem um dos seguintes formatos:
![]() onde:
C é uma cadeia com no máximo 1 branco entre suas palavras
Os exemplos a seguir mostram o uso de cada Instrução para realizar cada uma das situações onde a conversão é necessária.
|
Cada exemplo abaixo considera os arquivos Fornecedor e Cliente, originalmente com os seguintes campos:
Fornecedor:
Endereço (Digitado, Cadeia, 50) Telefone (Digitado, Cadeia, 11).
![]() onde: D = byte de deletado, Cliente:
Grau (Digitado, Pequeno) Comentário (Digitado, Texto em Comentar.XXX , com 10 linhas de 30 caracteres).
![]() onde: D = byte de deletado,Para efeitos didáticos, as alterações serão feitas sempre sobre o arquivo original e uma de cada vez. No caso real, o projetista poderá, em um único comando de conversão, efetuar diversas alterações.
Também para facilitar a compreensão, as instruções serão descritas uma a uma. O projetista poderia somar as instruções de mesmo significado e descrevê-las de uma única vez. Assim:
ConvArq Fornecedor.xxx 2 21 51 +2 12 é equivalente a:
ConvArq Fornecedor.xxx 74 +2 12
|
|
Exemplo | Incluir um campo Inteiro após o Endereço
ConvArq Fornecedor.XXX 2 21 51 +2 12
![]()
![]()
|
Exemplo | Excluir o campo Telefone
ConvArq Fornecedor.XXX 2 21 51 -12
![]()
![]()
|
Exemplo | Colocar o campo Telefone antes do Endereço
ConvArq Fornecedor.XXX 2 21 -51 12 #12 #51 51 -12
![]()
|
Exemplo | Aumentar o tamanho de Endereço para 60 caracteres
ConvArq Fornecedor.XXX 2 21 -1 +1(60) 50 +10(' ') 12
![]()
|
Exemplo | Diminuir o tamanho de Endereço para 40 caracteres
ConvArq Fornecedor.XXX 2 21 -1 +1(40) 40 -10 12
![]()
|
Exemplo | Aumentar o tamanho do Nome do Fornecedor para 30 caracteres
ConvArq Fornecedor.XXX 1 -1 +1 -1 +1(30) 20 +10(' ') 51 12
![]()
|
Exemplo | Diminuir a Largura do campo Comentário para 20 caracteres
ConvArq Comentar.XXX 20 -10
![]()
|
Nota | No arquivo Cliente.XXX não houve modificação. No arquivo Comentar.XXX não existem os 2 bytes de prefixo.
|
Exemplo | Aumentar a Largura do campo Comentário para 40 caracteres
ConvArq Comentar.XXX 30 +10(' ')
![]()
|
Exemplo | Diminuir a Altura do campo Comentário para 5 linhas
ConvArq Comentar.XXX 150 -150
![]()
|
Exemplo | Aumentar a Altura do campo Comentário para 15 linhas
ConvArq Comentar.XXX 300 +150(' ')
![]()
|
Exemplo | Passar o Endereço para Não Permanente em Memória
Esta conversão deve ser feita em 3 etapas:
Copy Fornecedor.XXX _Fornecedor.XXX Converter a parte em memória, criando os 2 bytes de ponteiro para parte em disco e retirando o campo Endereço.
ConvArq Fornecedor.XXX 2 +2(#) 21 -51 12
![]() Converter a parte em disco, tirando os 2 bytes de prefixo e os campos que não são em disco.
ConvArq _Fornecedor.XXX -2 -21 51 -12
![]()
|
Para este exemplo, imagine um cadastro de pessoal (PESSOA.PAG) que, por exigências do usuário, precise sofrer algumas alterações, incluíndo novos campos e alterando alguns já existentes:
![]() Para efetuar estas conversões, utilize o comando:
ConvArq Pessoa.PAGonde:
![]()
|
|
Nota | Imposto e Telefones são campos que não ocupam espaço, logo não tem instrução para eles.
A conversão só será realizada se o tamanho do arquivo PESSOA.PAG original (antigo) for múltiplo de 45 bytes, que é o somatório das instruções N e -N (=67) menos o somatório das instruções #N (=22).
|
Uma atualização global será necessária quando o projetista não quer apenas criar, excluir ou modificar a posição de campos, mas também alterar o tipo do campo ou seu modo de obtenção e ainda inicializar os novos campos com valores referentes a sua nova situação.
Estes casos normalmente provocam uma conversão em três etapas: incluir um novo campo, atribuir a este novo o valor do campo antigo em uma Atualização Global e excluir o campo anterior.
|
|
Exemplo | Trocar o Tipo do campo Grau de Pequeno para Real
ConvArq Cliente.XXX 2 21 1 +6 2
![]() Executar uma Atualização Global para atribuir o campo antigo no novo
Dar um nome para a atualização, como por exemplo, MudaGrau. Selecionar o Arquivo Cliente sem Visão, Condição e Ordenação Nas linhas de comando, informar:
altGrauReal (Grau);
Tirar o campo Pequeno, mantendo apenas o Real (trocando seu nome para Grau), regerar a aplicação e executar a última conversão:
ConvArq Cliente.CAD 2 21 -1 6 2
![]() Criar um arquivo de lote (.BAT) com os comandos utilizados na conversão, de forma a levá-lo, juntamente com o programa MudaGrau.EXE, para o ambiente de produção:
ConvArq Cliente.XXX 2 21 1 +6 2 |