Vous êtes sur la page 1sur 43

Escola Nacional de

Ciências Estatísticas

Computação

Unidade XII: Arquivos Texto

Prof. Eduardo Corrêa


Data 14/11/2007
1
Arquivos
Definição: estruturas de dados armazenadas em
dispositivos de memória secundária, tais como Hard
Disks e Pen Drives.

Se não gravarmos o resultado de um programa em


arquivo eles são perdidos após desligarmos o
computador!!!

Exemplos de utilização na Estatística:

Armazenamento de bancos de dados de pesquisas.

Disponibilizar os resultados da análise estatística sobre


bases de dados (ex: tabulações).

2
Arquivo Proprietário x Arquivo Texto
Arquivo Proprietário: só pode ser manipulado pelo
software que “entende” o seu formato (o software
proprietário).

XLS (Excel), MDB (Access), PDF (Acrobat Reader)

Arquivo Texto: pode ser visualizado a partir de qualquer


editor de texto comum!

3
Características dos Arquivos Texto
 São muito utilizados por Matemáticos, Estatísticos, Físicos, pois seu
formato é “confortável”.

 Podem ter o seu conteúdo acessado e alterado de maneira


extremamente simples.

 Podem ser acessado por praticamente todos os softwares


Estatísticos, como SAS, SPSS, Weka, Excel, etc.

 Podem ser usados em qualquer ambiente computacional (PC com


Linux ou Windows, ambiente mainframe, Macintosh, etc), sem
haver a necessidade de realizar conversões.

 Menos eficientes e sofisticados do que os arquivos proprietários.

 Um tanto quanto inseguros (qualquer um pode abrir, ler e alterar,


sem precisar usar um programa específico).
4
Tabela ASCII
Os arquivos texto também são chamados de arquivos ASCII
(American Standard Code for Information Interchange).

Tabela ASCII:

Recurso criado em 1961 com o intuito de possibilitar a


comunicação entre computadores de diferentes fabricantes.

Conjunto de caracteres, cada um associado a um único código


numérico.

5
Tabela ASCII
Todos os dados na memória RAM só podem ser armazenados como
números e no formato binário!

Mas os sistemas precisam guardar dados alfanuméricos (Nome,


Endereço, Resumo de um Livro).

Toda vez que um caractere é lido do teclado ou de um arquivo, o


que vai para a memória é o seu código ASCII!

6
Tabela ASCII
“@” possui o código 64 (está na linha 6 e na coluna 4 da tabela).

O caractere “A” (maiúsculo) possui o código 65, enquanto o


caractere “a” (em minúsculo!) possui o código 97.

if ‘A’ = ‘a’ resulta em FALSE para o Pascal.

if ‘001’ < ‘005’, resulta em TRUE, pois a comparação é


feita código por código!

7
Tabela ASCII
Os caracteres de 0 a 32 são chamados de caracteres de
controle.

Utilizados com propósito especial: exibir um espaço em branco


(caractere 32), inserir uma tabulação (caractere 9) e
determinar o final de uma linha (no Windows, isso é feito pela
junção dos caracteres 10 e 13).

Muitos já caíram em desuso.

8
Arquivo Seqüencial
Usados na Estatística para representar um banco de dados
simplificado.

Cada uma de suas linhas representa um registro ou


observação, que fornece informações sobre um determinado
objeto de estudo.

Exemplo: Arquivo com Separador

Possui cabeçalho +
observações.

Caracteres mais
usados como
separador “,” (vírgula),
“;” (ponto e vírgula),
TAB (ASCII 9), “ |
“ (pipe) e espaço em
branco (ASCII 32).

9
Arquivo Seqüencial
Arquivos com Campo de Tamanho Fixo (fixed-width column file)

As fronteiras entre os diferentes campos são definidas através


da posição e do tamanho de cada um dos campos.

Necessita de um Dicionário de Dados para explicar o arquivo.

10
Os caracteres “Fim de Linha”
Cada linha de um arquivo seqüencial deve ser finalizada com ENTER
(também conhecido como FIM DE LINHA).

Isso parece óbvio, mas...

É importante saber que internamente o computador representa


a tecla ENTER através de dois caracteres ASCII de controle: CR
e LF (ASCII 10 e 13).

Os caracteres CR e LF não são visíveis para as pessoas,


mas podem ser manipulados pelos comandos de um programa.

11
Arquivos no Pascal
Arquivos texto podem ser abertos (acessados) por
programas Pascal em dois modos distintos:

Leitura: o conteúdo (linhas) do arquivo pode ser


acessado, mas não pode ser alterado.

Escrita: usa-se este modo quando desejamos criar um


novo arquivo ou adicionar linhas a um arquivo
existente.

12
Arquivos - Modo Leitura
program AbreArquivo; As palavras relacionadas a
var ARQ: text; seguir estão sempre
S: string; envolvidas em programas
begin que manipulam arquivos no
modo de leitura:
assign(ARQ, ‘C:\Letras\AMERICA.TXT’);
Text
reset(ARQ);
Assign
while not EOF(ARQ) do
begin
Reset
readln(ARQ, S);
... EOF
... (outros comandos)
... Readln (ou Read).
end;
Close
close(ARQ);
A seguir, apresenta-se a
readln; “receita de bolo” para
trabalhar com a leitura de
end.
arquivos no Pascal.
13
Arquivos - Modo Leitura
program AbreArquivo; Antes de trabalhar com
var ARQ: text; arquivos texto, é preciso
S: string; declarar uma variável do
begin tipo texto no programa.

assign(ARQ, ‘C:\Letras\AMERICA.TXT’); Uma variável do tipo texto é


declarada do mesmo modo
reset(ARQ); que uma variável integer,
char, real, etc.
while not EOF(ARQ) do
begin
Basta escolher o nome
readln(ARQ, S); da variável e especificar
... o tipo text.
... (outros comandos)
... No exemplo ao lado, foi
end; declarada uma variável de
nome “ARQ” com o tipo
close(ARQ); text.
readln;

end.

14
Arquivos - Modo Leitura
program AbreArquivo; Uma vez declarada a variável
var ARQ: text; text, devemos associá-la a
S: string; um arquivo texto
begin armazenado no HD, Pen-
Drive ou Disquete.
assign(ARQ, ‘C:\Letras\AMERICA.TXT’);
Isto é feito com o uso do
reset(ARQ); comando assign.
while not EOF(ARQ) do No exemplo ao lado,
begin associamos a variável text
ARQ com o arquivo
readln(ARQ, S); C:\Letras\AMERICA.TXT
...
... (outros comandos) Este arquivo está gravado
... no Hard Disk (HD) da
end; máquina onde o programa
Pascal será executado.
close(ARQ);
A partir de agora, podemos
readln; referenciar
C:\Letras\AMERICA.TXT
end. como ARQ dentro de nosso
programa (isso torna menos
cansativa a programação...)
15
Arquivos - Modo Leitura
program AbreArquivo; Após associar um arquivo à
var ARQ: text; variável text, usamos o
S: string; comando reset.
begin
Este é o comando
assign(ARQ, ‘C:\Letras\AMERICA.TXT’); responsável por abrir o
arquivo no modo leitura.
reset(ARQ);
Lembre-se que no modo
while not EOF(ARQ) do
leitura um arquivo não pode
begin
ter o seu conteúdo alterado.
readln(ARQ, S);
... Qualquer tentativa de gravar
dados em um arquivo texto
... (outros comandos)
aberto pelo comando reset,
...
resultará em ERRO!!!
end;
Da mesma forma, se tentarmos
close(ARQ); abrir um arquivo que não
existe (ex: especificamos um
readln; nome errado no assign),
ocorrerá ERRO!!!
end.

16
Arquivos - Modo Leitura
O comando reset também posiciona o ponteiro do arquivo no início
do arquivo.

O ponteiro do arquivo é uma espécie de “marcador” que indica a


parte do arquivo que está sendo consultada num dado momento.

Toda vez que um arquivo é aberto, o ponteiro é colocado no início do


arquivo e pode ser movido para frente a partir deste ponto (até que
ele chegue no final do arquivo).

Esta situação é ilustrada no


próximo slide.

17
Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
program AbreArquivo;
var ARQ: text;
S: string;
begin

assign(ARQ, ‘C:\Letras\AMERICA.TXT’);

reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

close(ARQ);

readln;

end.

18
Arquivos - Modo Leitura
program AbreArquivo; Para percorrermos as linhas
var ARQ: text; do arquivo, precisamos
S: string; implementar um loop.
begin
Este loop deve utilizar a
assign(ARQ, ‘C:\Letras\AMERICA.TXT’); função EOF: desta forma ele
é mantido até que o
reset(ARQ); ponteiro do arquivo
alcance o final do arquivo.
while not EOF(ARQ) do
begin
A função EOF é uma função
readln(ARQ, S); booleana que retorna:
...
... (outros comandos) TRUE: caso o ponteiro do
... arquivo tenha alcançado o
end; fim do arquivo.

FALSE: caso o ponteiro do


close(ARQ);
arquivo ainda não tenha
alcançado o fim do arquivo.
readln;

end.

19
Arquivos - Modo Leitura
program AbreArquivo; while not EOF(ARQ) do
var ARQ: text; significa a mesma coisa que:
S: string;
begin “enquanto não for o fim do
arquivo faça”.
assign(ARQ, ‘C:\Letras\AMERICA.TXT’);

reset(ARQ); IMPORTANTE (isso confunde!!!)

while not EOF(ARQ) do not EOF(ARQ)


begin
equivale a
readln(ARQ, S);
...
... (outros comandos)
EOF(ARQ) = FALSE
...
end;
Ou seja, eu poderia ter
close(ARQ); utilizado também:

readln; while EOF(ARQ) = FALSE do

end. (no entanto, quase ninguém usa


essa forma de escrever)
20
Arquivos - Modo Leitura
program AbreArquivo; Dentro do loop, utilizamos o
var ARQ: text; comando readln para:
S: string;
begin Ler uma linha do
arquivo e armazenar o
assign(ARQ, ‘C:\Letras\AMERICA.TXT’); seu conteúdo numa
variável string.
reset(ARQ);
Avançar o ponteiro do
while not EOF(ARQ) do
arquivo.
begin

readln(ARQ, S);
... Para melhor compreensão
... (outros comandos) destes conceitos, vamos
... exemplificar com o arquivo
end; do “Hino do América”.

close(ARQ);

readln;

end.

21
Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

Neste ponto o arquivo acaba de


ser aberto:

O ponteiro está na primeira


linha.

Logo, o fim do arquivo não


foi alcançado!

EOF(ARQ) FALSE

S
22
Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

Agora o Pascal começará o loop


que percorre todo o arquivo.

O while faz a pergunta “É o fim


do arquivo?”. A resposta é Não
(o ponteiro está no início!!!)

Então o Pascal inicia o loop.

EOF(ARQ) FALSE

S
23
Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

O comando readln(ARQ,S) é
encontrado. Duas ações são
realizadas pelo Pascal:

O conteúdo da primeira linha do


arquivo armazenado na variável S.

O ponteiro do arquivo é posicionado


linha 2.

EOF(ARQ) FALSE

S Hino do América – Lamartine Babo 24


Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

O while pergunta “estou no final do


arquivo?”

Não! O ponteiro está na linha 2!

Então o loop continuará.

EOF(ARQ) FALSE

S Hino do América – Lamartine Babo 25


Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

O conteúdo da segunda linha do


arquivo armazenado na variável S.

O ponteiro do arquivo é posicionado


linha 3.

EOF(ARQ) FALSE

S ================================ 26
Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

O while pergunta “estou no final do


arquivo?”

Não! O ponteiro está na linha 3!

Então o loop continuará.

EOF(ARQ) FALSE

S ================================ 27
Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

O conteúdo da terceira linha do


arquivo armazenado na variável S.

O ponteiro do arquivo é posicionado


linha 4.

EOF(ARQ) FALSE

S Hei de torcer, torcer, torcer 28


Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

EOF(ARQ) FALSE

S Hei de torcer, torcer, torcer 29


Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

EOF(ARQ) FALSE

S Hei de torcer, até morrer, morrer, morrer 30


Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

Décima-terceira iteração do loop

EOF(ARQ) FALSE

S Tra-la-la-la-la-la-la 31
Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

Até que, na vigésima-quinta


iteração, o ponteiro alcança o fim do
arquivo.

EOF(ARQ) TRUE

S América unido vencerás 32


Arquivos - Modo Leitura
PONTEIRO DO ARQUIVO
reset(ARQ);

while not EOF(ARQ) do


begin

readln(ARQ, S);
...
... (outros comandos)
...
end;

O while pergunta “estou no final do


arquivo?”

SIM! O ponteiro está no final do


arquivo

Então o loop será encerrado.

EOF(ARQ) TRUE

S América unido vencerás 33


Arquivos - Modo Leitura
program AbreArquivo; IMPORTANTE. O ponteiro
var ARQ: text; do arquivo:
S: string;
begin “Anda” apenas para frente
(ou seja, eu não posso
assign(ARQ, ‘C:\Letras\AMERICA.TXT’); recuar linhas, só avançar).
reset(ARQ); Só “anda” de linha em linha.
while not EOF(ARQ) do Isto quer dizer que eu não
begin posso “mandar” o ponteiro
avançar diretamente para a
readln(ARQ, S); linha 10.
...
... (outros comandos) Para alcançar a linha 10, o
... ponteiro deve ter percorrido
end; as 9 linhas anteriores (ou
seja, o readln deve ter sido
close(ARQ); executado 9 vezes).

readln; Isto significa que estamos


realizando acesso
end. seqüencial ao arquivo.

34
Arquivos - Modo Leitura
program AbreArquivo; No momento em que não
var ARQ: text; precisarmos mais usar o
S: string; arquivo, devemos utilizar o
begin comando close.

assign(ARQ, ‘C:\Letras\AMERICA.TXT’); No modo leitura este


comando:
reset(ARQ);
Esvazia a área de
while not EOF(ARQ) do
memória alocada pelo
begin
computador para o
readln(ARQ, S); gerenciamento do
... arquivo.
... (outros comandos)
... Uma vez fechado, um
end; arquivo não pode ser mais
acessado pelo comando
close(ARQ); readln, até que ele seja
aberto novamente com o
readln; comando reset.
end.

35
Arquivos - Modo Escrita
program AbreArquivo; As palavras relacionadas a
var F: text; seguir estão sempre
begin envolvidas em programas
que manipulam arquivos no
assign(F, ‘C:\TESTE.TXT’); modo de escrita:

rewrite(F); Text
writeln(F, ‘PRIMEIRA LINHA’); Assign
writeln(F, ‘SEGUNDA LINHA’);
writeln(F, ‘TERCEIRA LINHA’);
Rewrite

close(F); Writeln (ou Read).

readln; Close

end. A seguir, apresenta-se a


“receita de bolo” para
trabalhar com a escrita de
arquivos no Pascal.

36
Arquivos - Modo Escrita
program AbreArquivo; Em primeiro lugar devemos:
var F: text;
begin Declarar uma variável
como text.
assign(F, ‘C:\TESTE.TXT’);
Usar o comando assign.
rewrite(F);

writeln(F, ‘PRIMEIRA LINHA’); Isto é feito da mesma forma


writeln(F, ‘SEGUNDA LINHA’);
como realizamos a leitura de
writeln(F, ‘TERCEIRA LINHA’);
arquivos.

close(F);

readln;

end.

37
Arquivos - Modo Escrita
program AbreArquivo; O comando rewirte é o
var F: text; responsável por abrir o
begin arquivo no modo escrita.

assign(F, ‘C:\TESTE.TXT’); Quando o rewrite é


executado um arquivo
rewrite(F); texto vazio é criado, com
nome igual ao que foi
writeln(F, ‘PRIMEIRA LINHA’); especificado no comando
writeln(F, ‘SEGUNDA LINHA’);
assign.
writeln(F, ‘TERCEIRA LINHA’);
MUITO CUIDADO: se
close(F); colocarmos o nome de
um arquivo existente no
readln; comando assign, este
terá o seu conteúdo
end. apagado.

O rewrite é um
comando perigoso!

38
Arquivos - Modo Escrita
program AbreArquivo; Quando abrimos um arquivo
var F: text; para escrita com o comando
begin rewrite, podemos escrever
linhas neste arquivo com o
assign(F, ‘C:\TESTE.TXT’); uso do comando writeln.

rewrite(F); Cada writeln que


escrevermos corresponderá a
writeln(F, ‘PRIMEIRA LINHA’); uma nova linha do arquivo.
writeln(F, ‘SEGUNDA LINHA’);
writeln(F, ‘TERCEIRA LINHA’);
Assim como no caso da
leitura, o ponteiro do arquivo
close(F); vai avançando a cada writeln
(e ele só avança pra
readln; frente...).

end. OBS: o comando writeln


insere automaticamente os
caracteres 10 e 13 no fim de
cada linha (ou seja, ele
coloca um “ENTER” no final
de cada linha).
39
Arquivos - Modo Escrita
program AbreArquivo; Ao final do processo de
var F: text; escrita, precisamos usar o
begin comando close para fechar o
arquivo.
assign(F, ‘C:\TESTE.TXT’);
Se o close não for usado, o
rewrite(F); arquivo não será gravado!
writeln(F, ‘PRIMEIRA LINHA’); O comando close é
writeln(F, ‘SEGUNDA LINHA’);
responsável por
writeln(F, ‘TERCEIRA LINHA’);
atualizar a tabela de
arquivos do sistema
close(F); operacional com os
dados do arquivo recém-
readln; criado.

end.

40
Arquivos - Modo Escrita
program AbreArquivo; Um arquivo existente
var F: text; também pode ser aberto
begin para escrita com o uso do
comando append.
assign(F, ‘C:\TESTE.TXT’);
Neste caso, no momento da
append(F); abertura o ponteiro do
arquivo vai para a posição
writeln(F, ‘QUARTA LINHA’); final do arquivo.
writeln(F, ‘QUINTA LINHA’);

close(F);
Desta forma podemos
acrescentar novas linhas no
readln; final do arquivo.

end.

41
Recebendo o Nome do Arquivo pelo Teclado
program AbreOArquivoQueUsuarioQuer;
É possível fazer com que o
var A: text;
usuário especifique o nome
NOME_ARQ, LIN: string;
begin de um arquivo através do
teclado.
write(‘Digite o nome do arquivo: ’);
readln(NOME_ARQ); Basta usar o nome digitado
no comando assign.
assign(A, NOME_ARQ);
reset(A);

writeln('CONTEUDO DO ARQUIVO: ');


writeln;

while not EOF(A) do


begin

readln(A, LIN);
writeln(LIN);
end;

close(A);

readln;

end. 42
FIM

43

Vous aimerez peut-être aussi