Leitura e Gravação de Arquivos em Pascal com Cadastro de Clientes - Parte 1

Linguagem Pascal.jpg

Um bom número de leitores tem me pedido programas que tem que fazer leitura e gravação de arquivos.

Já postei algumas coisas ligadas a arquivo texto. Nessa postagem vou explicar como gravar um cadastro de clientes e depois vamos ler esse arquivo.

Observação: Com o PASCALZIM esse programa não roda. Se tem o FREEPASCAL que também gratuito e se aproxima muito mais do TURBOPASCAL, para que usar o PASCALZIM que é cheio de limites? Senhores professores de outras instituições, vão querer usar o PASCALZIM, só por que é uma produção nacional? Mesmo que cheia de limites e fora dos padrões do PASCAL?

Amanhã estarei postando a versão PASCALZIM desse programa.

Antes de ir ao programa vamos criar uma estrutura para o nosso arquivo:

Codigo (com 6 caracteres)

Nome (com 40 caracteres)

Endereco (com 60 caracteres)

Telefone (com 10 caracteres) com DDD e sem parêntesis ou sinal de menos

Transformando para Pascal essa parte:

TYPE

TCliente = Record

codigo : String [6];

nome : String[40];

endereco : String [60];

telefone: String[10];

End;

Por que colocar String[]?

Para economizar memória do computador e com isso o programa irá ser executado melhor.

O programa será composto de dois momentos diferentes:

1. Gravar alguns clientes

2. Mostrar os clientes

Ao gravar nós devemos lembrar da estrutura de arquivos que garanta na primeira vez que executarmos o programa para que CRIE o arquivo e na segunda vez apenas ABRA o arquivo. Veja a estrutura abaixo:

ASSIGN (F,'Nomedoarquivo');

{$I-} // Desabilita o controle de erros de arquivos

RESET (F); // Tenta abrir o arquivo caso ele exista

SEEK (F, FILESIZE(F)); // Vai para o final do arquivo

{$I+} // Habilita o controle de arquivo

if IORESULT()<>0 then REWRITE(F); // Se o IORESULT (Resultado de arquivos) for igual a 0 o arquivo foi aberto corretamente, se for outro valor diferente de 0 irá usar o comando REWRITE para criar o arquivo.

Na parte de leitura é necessário ir ao início do arquivo com o comando SEEK e depois criar um looping com WHILE para repetir enquanto não for o final do arquivo.

Vamos ao programa:

 Program Gravar_e_Ler_Arquivos_01;  
 Uses Crt;  
 Type  
  TCliente = Record  
   codigo  : String [6];  
   nome   : String [40];  
   endereco : String [60];  
   telefone : String [10];  
  End;  
 Var  
  Cliente : TCliente;  
  Arquivo : File of TCliente; //Arquivo do tipo TCliente  
  i    : Integer;  
  q    : Integer;  
 Begin  
  ClrScr;  
  // Momento 1 - Gravar o Arquivo  
  // Abre Arquivo  
  Assign (Arquivo,'Clientes.ARQ');  
  {$I-}  
  Reset (Arquivo);  
  // Avan‡ar ate o ultimo registro  
  Seek (Arquivo, FileSize(Arquivo));  
  {$I+}  
  if IORESULT()<>0 then ReWrite(Arquivo);  
  //  
  Write ('Quanto clientes para adicionar (0 para nenhum)?'); ReadLn (q);  
  For i:=1 to q do  
  Begin  
   // Entrada dos Dados  
   Write ('Codigo...: '); ReadLn (Cliente.Codigo);  
   Write ('Nome.....: '); ReadLn (Cliente.Nome);  
   Write ('Endereco.: '); ReadLn (Cliente.Endereco);  
   Write ('Telefone.: '); ReadLn (Cliente.Telefone);  
   // Grava‡Æo  
   Write (Arquivo,Cliente);  
  End;  
  // Fecha Arquivo  
  Close (Arquivo);  
  // Momento 2 - Mostrar os Clientes  
  // Abre Arquivo  
  Assign (Arquivo,'Clientes.ARQ');  
  {$I-}  
  Reset (Arquivo);  
  {$I+}  
  if IORESULT()<>0 then ReWrite(Arquivo);  
  // Ir para o inicio do arquivo  
  Seek (Arquivo,0);  
  // Leia o arquivo at' o final  
  While Not(Eof(Arquivo)) Do  
  Begin  
   Read (Arquivo,Cliente);  
   WriteLn ('Codigo...: ', Cliente.Codigo);  
   WriteLn ('Nome.....: ', Cliente.Nome);  
   WriteLn ('Endereco.: ', Cliente.Endereco);  
   WriteLn ('Telefone.: ', Cliente.Telefone);  
  End;  
  // Fecha Arquivo  
  Close (Arquivo);  
  // Pausa no final do programa  
  ReadLn;  
 End.  

7 comentários:

  1. Arquivo : File of TCliente; quando copilada o programa ela da erro nesta linha eu utilizo o pascalzim!

    ResponderExcluir
  2. Professor estou aguardado a versão em pascalzim estou precisando copilar no mesmo, desde já agradeço.

    ResponderExcluir
    Respostas
    1. Precisando aprender a escrever também...

      Excluir
  3. Arquivo : File of TCliente; quando copilada o programa ela da erro

    ResponderExcluir
  4. Qual a versão do Pascal que está usando? Free Pascal/ Pascal Zim/ Dev Pascal.

    Algumas versões antigas do Pascal Zim tem problemas com arquivos tipados e binários.

    ResponderExcluir
  5. Boa Tarde,

    A ideia é marcar o registro antes de apagar e depois criar uma rotina para organizar o arquivo.

    Se for apagar diretamente, você vai ter que copiar o arquivo com todos os dados para um novo arquivo sem esse registro e depois apagar o arquivo antigo e renomear o novo.

    ResponderExcluir