|
Aula 21: Ficheiros
|
|
Comunicar com ficheiros
Hoje
vamos aprender como escrever e ler ficheiros. Neste aula vamos
só
usar ficheiros do tipo texto. Isto são ficheiros com os dados no
formato ASCII e legível pelas pessoas enquanto que os outros
formatos
são do tipo binário e só legível pelo
computador.
Todos os nossos ficheiros com os programas de PASCAL são do tipo
ASCII.
Podemos ler e escrever ficheiros na disquete ou disco rigido ou mesmo
do CD-ROM (neste caso - obviamente - é só possível
ler os ficheiros).
Instruções
As seguintas instruções de PASCAL são relacionado
ao acesso dos ficheiros:
Var text
Assign
Rewrite
Reset
Close
Read, ReadLn
Write, WriteLn
Eol, Eof |
Declarar ficheiros:
Antes de abrir um ficheiro temos de especificar um variável que
vai guardar a informação do ficheiro. Em PASCAL a
declaração
é assim:
Com filehandle o nome da
variável
que contem o estado do ficheiro. Isto não é igual ao nome
do ficheiro, mas é só uma variável que vai guardar
a informação do estado do mesmo (por exemplo: onde fica
no
disco?, está aberto?, a última unidade da
informação).
O lugar de declarar este variável é com a
declaração
das outras variáveis.
Example:
Var f: text;
Atribuir um nome
Dentro do programa temos de especificar o nome (como está no
disco)
antes de abrir o ficheiro:
Assign(filehandle,filename); |
O filehandle é igual
à
variável acima e filename
é um string (constante ou variável) que contem o nome do
ficheiro. Por exemplo:
Assign(f, 'MYFILE.TXT');
ReadLn(s);
Assign(f, s);
Input ou output?
Para abrir o ficheiro, existem duas formas. A escolha da forma depende
do tipo da comunicação input (ler) ou output (escrever):
Reset(filehandle);
|
Rewrite(filehandle);
|
Por exemplo:
Reset(f);
Rewrite(f);
Ler e escrever
Ler e escrever é igual a ler e escrever através o teclado
e o ecrã, respectivamente. Usamos as mesmas
instruções
(Read, ReadLn, Write, and WriteLn). A única diferença
é
que leve mais um parâmetro, nomeademente o ficheiro:
Read(filehandle,...);
|
ReadLn(filehandle,...);
|
Write(filehandle,...);
|
WriteLn(filehandle,...);
|
Nota que podemos só usar as instruções Read
e ReadLn para ficheiros que
foram
abertos para input (por Reset). Da mesma forma
as
instruções Write e
WriteLn
é para escrever nos ficheiros que estão preperados para output
(por Rewrite). Exemplos:
WriteLn(f, r:0:2);
ReadLn(f, opcao);
|
|
Ler uma variável com o teclado
|
Ler uma variável de um ficheiro
|
Fechar o ficheiro
Quando estamos pronto com o acesso do ficheiro temos de fechar-o. Isto
é especialmente importante para ficheiros de output. Se
esquecemos
de fechar o ficheiro os dados no ficheiro não estarão
completos.
Fechar um ficheiro fazemos assim:
por exemplo:
Close(f);
Resumo
Escrever e ler um ficheiro tem sempre os seguintes passos:
Eol, Eof
Duas instruções úteis sãol
Eol(filehandle): retorna TRUE se estamos a ler
no fim da linha.
Eof(filehandle): retorna TRUE se estamos a ler
no fim do ficheiro.
Exemplo:
While NOT Eof(f) do
ReadLn(s);
o que vai ler até o fim do ficheiro.
Exemplos
código PASCAL |
ecrã |
ficheiro TEST.TXT
após de correr o programa |
PROGRAM WithFileOutPut;
Var f: text;
s: string;
i: integer;
begin
WriteLn('Nome do Ficheiro:');
ReadLn(s);
Assign(f, s);
Rewrite(f);
for i := 1 to 10 do
WriteLn(f, i, '
Ola');
Close(f);
end.
|
Nome do Ficheiro:
TEST.TXT |
1 Ola
2 Ola
3 Ola
4 Ola
5 Ola
6 Ola
7 Ola
8 Ola
9 Ola
10 Ola |
código PASCAL |
ecrã |
ficheiro TEST.TXT antes
de correr o programa |
PROGRAM WithFileInPut;
Var f: text;
c: char;
s: string;
i: integer;
begin
WriteLn('Nome do Ficheiro:');
ReadLn(s);
Assign(f, s);
Reset(f);
While NOT Eof(f) do
begin
(*
le
um caractere: *)
Read(f,
c);
(*
mostra
no ecran: *)
Write(c);
end;
Close(f);
end.
|
Nome do Ficheiro:
TEST.TXT
1 Ola
2 Ola
3 Ola
4 Ola
5 Ola
6 Ola
7 Ola
8 Ola
9 Ola
10 Ola |
1 Ola
2 Ola
3 Ola
4 Ola
5 Ola
6 Ola
7 Ola
8 Ola
9 Ola
10 Ola |
Peter Stallinga.
Universidade
do Algarve, 30 Abril 2002