Pascal: guardando dados em arquivos text.

Praticamente todos os programas que criamos (pelo menos de grande porte) necessitam de guardar dados para serem acessados mais tarde, e como essa necessidade surgiu em meu trabalho semestral da faculdade eu fiquei algumas horas estudando como fazer o mesmo, visto que preciso guardar esses dados em um arquivo .txt utilizando a linguagem Pascal (linguagem que eu odeio). Partindo para o que interessa:

Para começar a construção desse algoritmo primeiro precisamos entender o que são tipos de dados, seus tipos e quais iremos usar especificamente.

Em pascal, como em outras linguagens as variáveis possuem um tipo de dados que podem ser primitivos ou compostos, os tipos primitivos são char, string, integer, real, boolean, etc. Os tipos compostos são: array, record, etc. Iremos trabalhar com o tipo composto record.

O tipo record (ou registro) é usado para agrupar dados, um conceito bem semelhante de banco de dados, fazendo uma comparação grosseira: cada tipo record pode ser entendido como uma tabela de um determinado banco de dados, e cada dado dentro dessa variável pode ser entendido com os campos da tabela, um exemplo:

program db;
type ModelCar = record          {criamos um tipo de dados (ModelCar)
                                 que por sua vez é um record}
 {dados de ModelCar}
  marca  : string[15];          
  modelo : string[20];
  ano    : integer;
end;
var
  carro : ModelCar;

begin
  writeln('Marca do carro: ');
  readln(carro.marca);           {estamos lendo um valor digitado pelo usuário
                                  para o campo marca dentro da variável carro de 
                                  tipo record(?)}
  writeln('Modelo do carro: ');
  readln(carro.modelo);
  writeln('Ano do carro: ');
  readln(carro.ano);

  writeln('A marca do carro é: ', carro.marca);    {nos referenciamos aos dados
                                                    salvos na variável carro}
  writeln('O modelo do carro é: ', carro.modelo);
  writeln('O ano do carro é: ', carro.ano);
end.

Explicando o código: em “type ModelCar : record[…]” estamos “criando” um tipo de dados record que será referenciado no programa por ModelCar, este contém os campos marca, modelo e ano. Logo após declaramos uma variável carro com o tipo de dados ModelCar que acabamos de criar. No corpo do programa usamos um “readln(carro.marca)”, ou seja, estamos lendo a entrada de dados diretamente para o campo marca da variável carro, fazemos o mesmo para referenciar este campo em “writeln(‘A marca do carro é:  ‘, carro.marca”).

Mas e para salvar em um arquivo text? como recuperar depois? já chegaremos lá, antes tem alguns pontos que merecem nossa atenção:

O pascal possui dois tipos de arquivos, file e text, trabalharemos com o text, talvez eu escreva sobre o file, mas vamos entendê-lo: o tipo de arquivo text tem que ser referenciado a uma variável para depois ser guardado em um arquivo.

Abaixo segue uma breve explicação sobre as instruções que poderemos utilizar:

Assign: Associa um arquivo a uma variável do tipo file ou text.

Exemplo: Assign(variavel, ‘arquivo/text/no/hd.text’);

Reset: abre um arquivo existente no HD, antes é preciso referenciar o arquivo a uma variável de tipo file ou text com a instrução Assign.

Exemplo: Reset(variavel);

Rewrite: abre um arquivo (caso exista) ou cria um arquivo (caso não exista), ao abrir um arquivo com Rewrite todo o conteúdo já contido no arquivo será apagado. Lembrando que como os outros comandos é preciso que o arquivo text esteja referenciado a uma variável de tipo file ou text.

Exemplo: Rewrite(variavel);

Append: abre um arquivo para inclusão de novas informações.

Exemplo: Append(variavel);

Close: fecha um arquivo, seu uso é recomendado sempre antes de finalizar o algoritmo.

Exemplo: Close(variavel);

Writeln: já conhecido para imprimir comandos na tela, também é usado para guardar dados no arquivo, apenas com uma pequena alteração na instrução.

Exemplo: Writeln(variavel, ‘texto a guardar no arquivo’);

Readln: lê os dados guardados em um arquivo para uma variável.

Exemplo: Readln(variavel_arquivo, variavel_dado);

EOF (End Of File): retorna True quando for encontrado o fim do arquivo.

Exemplo: fim := EOF(variavel);

Seek: move o ponteiro para uma posição no arquivo especificada.

Exemplo: Seek(variavel, 2);

FilePos: retorna a posição atual do ponteiro no arquivo.

Exemplo: FilePos(variavel);

FileSize: retorna a quantidade de registros de um arquivo.

Exemplo: numero := FileSize(variavel);

Não explicarei o que são ponteiros (também chamados de apontadores) pois é um outro assunto que aumentaria muito a postagem.

Agora vamos para a parte prática construir um algoritmo que grave e leia dados de um arquivo text. Como os comentários excediam o layout do blog postei o código comentado aqui.

program db;
uses crt, dos;
var arq   : text;
    campo : string;
    opcao : integer;
begin
Assign(arq, 'db.txt');
repeat
 writeln('1 - incluir registro');
 writeln('2 - ver registros');
 writeln('3 - sair');
 readln(opcao);
  case opcao of
   1 : begin
        Append(arq);
        writeln('Escreva o que deseja incluir: ');
        readln(campo);
        writeln(arq, campo);
        Close(arq);
        clrscr;
       end;
   2 : begin
        Reset(arq);
        while not EOF(arq) do
        begin
         readln(arq, campo);
         writeln(campo);
        end;
        writeln('');
        writeln('Aperte qualquer tecla para voltar ao menu');
        readkey;
        clrscr;
        Close(arq);
       end;
  end;
until opcao = 3;
end.

Acho que não preciso explicar o código porque ele está bem comentado (ao meu ver), a única coisa a tomar nota é que na leitura de um arquivo não tem como lê-lo inteiro em uma instrução, tem que ler linha por linha, por isso precisei colocar um laço while, o resto dos comandos como “readkey” e “clrscr” já devem ser de conhecimento de quem estuda Pascal.

Vou encerrar a postagem por aqui para não ficar muito extensa, abaixo seguem minhas fontes de pesquisa e algumas leituras recomendadas.

Clique para acessar o revpasc2.pdf

Uma breve explicação sobre ponteiros em bancos de dados: http://pt.wikipedia.org/wiki/Object_database#Recursos_T.C3.A9cnicos

Sobre Leonardo Andujar

Nascido em 27 de maio de 1994 na cidade de Maringá – PR, atualmente residindo em Engenheiro Beltrão – PR, usuário Linux desde 2010, atualmente trabalhando autônomo como técnico de informática e cursando Análise e Desenvolvimento de Sistemas pela Faculdade Integrado de Campo Mourão.

Publicado em março 21, 2012, em Programação e marcado como , , . Adicione o link aos favoritos. Deixe um comentário.

Deixe um comentário