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
Publicado em março 21, 2012, em Programação e marcado como pascal, salvando dados em text, type record. Adicione o link aos favoritos. Deixe um comentário.
Deixe um comentário
Comentários 1