Вы находитесь на странице: 1из 17

Linguagem de Programao

Aula 10 Arquivos

Universidade Federal de Santa Maria


Colgio Agrcola de Frederico Westphalen
Curso Tcnico em Informtica

Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno


Persistncia de dados em memria secundria
Arquivos
Permitem o armazenamento de dados em memria
secundria (discos rgidos, memria flash, discos
ticos, discos flexveis, etc.);
Que utilidade teriam nossos programas se toda a
informao computada por eles se perder quando os
mesmos so encerrados?
Arquivos possibilitam armazenar dados para posterior
recuperao.
Tipos de Arquivos
Podemos diferenciar basicamente 2 tipos de arquivos:
Arquivos sequencial
Tambm conhecido como arquivo texto;
Seu contedo somente pode ser acessado de forma sequencial;
Compe-se basicamente de uma sequncia de caracteres em formato
livre (no definido), pode ser editado por qualquer editor de textos
Arquivos randmico
Tambm conhecido como arquivo binrio;
Seu contedo organizado de forma que seja possvel acessar uma
determinada posio do arquivo de maneira aleatria (sem precisar
passar por todo o arquivo);
Compe-se de dados de um mesmo tipo dispostos sequencialmente.
Arquivos sequenciais
Arquivos sequenciais
Um arquivo sequencial organizado como sequncias
de caracteres em formato livre;

Um arquivo fonte de uma linguagem de programao,


uma pgina HTML, um arquivo XML ou um arquivo TXT
so exemplos de arquivos sequenciais.

No h como achar uma informao dentro do arquivo


sem necessariamente percorr-lo do incio at o final
Arquivos sequenciais em Pascal - TEXT
Em linguagem Pascal, o tipo TEXT utilizado para definir
que uma varivel ir representar um arquivo sequencial.
var
ListaDeTarefas : TEXT;
begin Novos
//associa a varivel ao arquivo fsico comandos para
Assign(ListaDeTarefas, 'lista.txt'); tratamento de
arquivos
Rewrite(ListaDeTarefas); //Cria o arquivo em disco
//Escreve os dados no arquivo
WriteLN(ListaDeTarefas, 'Estudar Programao');
WriteLN(ListaDeTarefas, 'Namorar');
WriteLN(ListaDeTarefas, 'Fazer exerccios');

Close(ListaDeTarefas); //Fecha e grava o arquivo em disco


end.
Testando a existncia de um arquivo
A ideia de arquivos fazer a persistncia de dados para uso futuro,
sendo assim, devemos prever a existncia de um arquivo antes de
propor sua criao e s o cri-lo caso no exista.
O cdigo abaixo demonstra como fazer isso com uma diretiva de
compilao que desabilita a verificao de erros de E/S
Assign(ListaDeTarefas, 'lista.txt');
{$i-} //Desabilita a checagem de erros de E/S (Entrada e Sada)
Reset(ListaDeTarefas); //Tenta abrir o arquivo
{$i+} //Habilita a checagem de erros de E/S

if IOResult > 0 then //Se houve algum erro de ES


Rewrite(ListaDeTarefas); //Recria o arq. pois ele existe
Percorrendo um arquivo sequencial
Para obtermos os dados de um arquivo sequencial precisamos
percorr-lo do incio ao fim, o cdigo abaixo demonstra como isso
pode ser feito (o cdigo lista os dados de um arquivo na tela).
writeln('Digite o nome do arquivo para ser listado: ');
readln(nome_arquivo);

Assign(ListaDeTarefas, nome_arquivo); //Associa varivel e arq.


Reset(ListaDeTarefas); //Abrir o arquivo

while not eof(ListaDeTarefas) do //Enquanto no chegar ao final


begin
//L do arquivo e armazena na varivel linha
readln(ListaDeTarefas, linha);
writeln(linha); //Escreve a varivel linha na tela
end;
Arquivos randmicos

Campo 1
Campo 2
Campo 3
Registro 1
Registro 2
Registro 3
...
Registro N
Arquivos randmicos
Um arquivo randmico organizado com sequncias de
elementos de um mesmo tipo, geralmente registros.

o tipo de arquivo mais comum em aplicaes.

O arquivo randmico possibilita navegao entre seus


registros de forma aleatria. possvel visitar o
primeiro, o ltimo ou o ensimo registro do arquivo
diretamente.
Arquivos binrios em Pascal FILE of
Em linguagem Pascal, o tipo FILE of utilizado para
definir que uma varivel ir representar um arquivo binrio.
type Campos do registro
TAlunos = record
nome : string;
sexo : char; nome sexo ano_nasc
ano_nasc : integer; Ana F 1994
end; Pedro M 1993
Registros do
Arquivo Julia F 1984
var
ArquivoDeInteiros : FILE of Integer; Saulo M 1988

CadastroDeAluno : FILE of TAlunos;

begin

end.
Gravando dados em arquivos binrios
Para gravar informaes em um arquivo binrio necessrio uma
varivel do mesmo tipo na qual o arquivo organizado. Os dados so
gravados na posio atual do arquivo.
var
arqAlunos : File of TAlunos;
alunos : TAlunos;
begin
Assign(arqAlunos, 'dados.dat');
Rewrite(arqAlunos);
alunos.nome := 'Ana';
alunos.sexo := 'F';
alunos.ano_nasc := 1985;
write(arqAlunos, alunos);
close(arqAlunos);
end;
Recuperando dados de arq. binrios
Para recuperar informaes de um arquivo binrio necessrio uma
varivel do mesmo tipo na qual o arquivo organizado.
var
arqAlunos : File of TAlunos;
alunos : TAlunos;
begin
Assign(arqAlunos, 'dados.dat');
Reset(arqAlunos);
while not eof(arqAlunos) do
begin
read(arqAlunos, alunos);
writeln(alunos.nome, ', sexo = ', alunos.sexo);
end;
close(arqAlunos);
end;
Ponteiro lgico de um arquivo binrio
O ponteiro lgico indica a posio atual em que o arquivo se
encontra (o nmero do registro). Arquivos binrios permitem a
movimentao do ponteiro lgico em qualquer direo;
O comando seek utilizado para movimentar o ponteiro um
determinado nmero de posies;
O comando FileSize retorna quantas posies possui um
arquivo e o comando FilePos retorna a posio atual do
ponteiro lgico;
Comandos como writeln e readln movimentam
automaticamente o ponteiro lgico para a prxima posio.
Acessando posies aleatrias em
arquivos binrios
writeln('O arquivo tem ', FileSize(arqAlunos), ' registros');
writeln('Informe o n do registro para consultar ')');
readln(posicao - 1); //A posio inicial sempre zero

seek(arqAlunos, posicao);

read(arqAlunos, a);
writeln('Nome: ', a.nome, ', sexo: ', a.sexo);

//Para mover o ponteiro lgico do arquivo para o primeiro registro


seek(arqAlunos, 0);

//Para mover o ponteiro lgico para o final do arquivo


seek(arqAlunos, FileSize(arqAlunos));
Exerccios para fixao

http://www.cafw.ufsm.br/~bruno/disciplinas/ling_programacao/exercicios/lista10.html

Вам также может понравиться