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

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.










