Arquivo Texto em Pascal com Array e Record

Esse foi mais um pedido de um leitor.

Arquivos texto eu já deixei alguns exemplo no blog, Array também e record também.

Mas, então: qual é a problemática?

A problemática é que para arquivos RECORD o tradicional é grava em arquivos binários.

Arquivo com ARRAY e Record em Pascal

Vamos a uma idéia de solução:

Coloquei no programa a seguir uma idéia de solução, mas é possível se criar várias outras. A idéia consiste em gravar os registros (RECORD) na memória (ARRAY) e depois gravar em formato texto e não em binário.

 program TXT_ARRAY_RECORD;  
 Uses Crt;  
 Type  
  Cadastro=RECORD  
   nome   : String[40];  
   endereco : String[50];  
   telefone : String[10];  
  End;  
 Var  
  Cad : Array [1..100] of Cadastro;  
  Arquivo : Text;  
  i, j : Integer;  
  s : String;  
 begin  
  ClrScr;  
  WriteLn ('Arquivos TXT com ARRAY e RECORD');  
  WriteLn;  
  Write ('Quantas pessoas você deseja cadastrar? '); ReadLn (j);  
  For i := 1 to j do  
  Begin  
   WriteLn ('Cadastro : ', i:3);  
   Write ('Nome....: '); ReadLn (Cad[i].nome);  
   Write ('Endereco: '); ReadLn (Cad[i].endereco);  
   Write ('Telefone: '); ReadLn (Cad[i].telefone);  
  End;  
  { Gravar em arquivo texto }  
  Assign (Arquivo,'Arquivo.txt');  
  ReWrite (Arquivo); // Cria um novo arquivo  
  for i := 1 to j do  
  Begin  
   WriteLn (Arquivo,cad[i].nome,chr(9),cad[i].endereco,chr(9),cad[i].telefone);  
  End;  
  Close (Arquivo);  
  { Lendo o arquivo e mostrando }  
  Assign (Arquivo,'Arquivo.txt');  
  Reset (Arquivo);  
  j := 0;  
  // Carrega na memória  
  While not(Eof(Arquivo)) do  
  Begin  
   j := j + 1;  
   ReadLn (Arquivo,s);  
   cad[j].nome := Copy (s,1,pos(chr(9),s)-1);  
   Delete (s,1,pos(chr(9),s));  
   cad[j].endereco := Copy (s,1,pos(chr(9),s)-1);  
   Delete (s,1,pos(chr(9),s));  
   cad[j].telefone := s;  
  End;  
  // Mostra  
  For i := 1 to j do  
  Begin  
   WriteLn ('Cadastro : ', i:3);  
   WriteLn ('Nome....: ',Cad[i].nome);  
   WriteLn ('Endereco: ',Cad[i].endereco);  
   WriteLn ('Telefone: ',Cad[i].telefone);  
  End;  
  Close (Arquivo);  
  ReadLn;  
 end.  

Comentários:

No programa acima todos os dados foram armazenados em uma linha e o código CHR(9) serve para separar os dados. O código CHR(9) é a tecla TAB e se abrir o arquivo: Arquivo.txt verá que os dados são separados por tabulação que é muito bom para copiar e colar em uma pasta de EXCEL.

6 comentários:

  1. ISTO E UMA MERDA E NAO VALE UMA PIÇA .l. <3 :$

    ResponderExcluir
    Respostas
    1. Vale sim, e muito para quem estuda! para vagabundo que so deixa pra estudar em cima da hora, tu pode mostrar até o gabarito que o animal nem saberá do que se trata !

      Excluir
  2. Vale sim, e muito para quem estuda! para vagabundo que so deixa pra estudar em cima da hora, tu pode mostrar até o gabarito que o animal nem saberá do que se trata !

    ResponderExcluir
  3. e como faço p/ acessar o arquivo depois de fechado e reaberto o programa?

    ResponderExcluir
  4. o único problema é que a cada vez que vc rodar o programa ele salva por cima do que já foi salvo :(
    teria um método de randomizar o nome do arquivo para salvar com nome diferente?

    ResponderExcluir
  5. Caro Sérgio,

    Pode ser pedido o nome do arquivo a ser salvo e assim você escolhe antes de gravar.

    Atenciosamente
    Prof. Wellington Telles

    ResponderExcluir