You are on page 1of 66

Estruturas de Dados para Pesquisa e

Ordenao Arquivos
Profa Brbara Quintela

barbaraquintela@pucminas.cesjf.br
Introduo
Como fazemos para armazenar informaes?
Introduo
Como fazemos para armazenar informaes?
E quando precisamos recuperar essa
informao em outro momento?
Introduo
Nesse curso veremos formas de
armazenamento e recuperao de informaes
mais persistentes
Memria secundria:
HDs, CDs, Fitas DAT, etc.
Dispositivos lentos
Analogia da biblioteca
Mas tem maior capacidade e menor custo
Introduo
Princpio da Localidade
Localidade temporal
Um dado tem grandes chances de ser acessado
novamente em um futuro prximo
Princpio da Localidade
Localidade temporal
Um dado tem grandes chances de ser acessado
novamente em um futuro prximo
Ex: loop
Princpio da Localidade
Localidade espacial
Um dado prximo a um dado que foi acessado
recentemente tem grandes chances de ser
acessado
Princpio da Localidade
Localidade espacial
Um dado prximo a um dado que foi acessado
recentemente tem grandes chances de ser
acessado
Ex: vetor
Buffers
SO trabalha com buffers
reas da memria principal usadas como meio de
transferncia das informaes de/para a memria
secundria
Detalhes dependem das caractersticas do
dispositivo e do SO
Arquivos
Arquivo identificado por nome e pelo
diretrio que est armazenado
Conveniente atribuir nomes para informaes que
sero recuperadas posteriormente
nomedoarquivo.extenso
Extenso identifica natureza da informao
armazenada
Ex: O arquivo codigo.c armazena um codigo-
fonte escrito na linguagem C
Arquivos
Um arquivo pode ser visto de duas maneiras:
Modo texto
Sequencia de caracteres
Modo binrio
Sequencia de bytes
Arquivos - Operaes
Abrir arquivo
SO encontra arquivo com dado nome e prepara buffer
na memria
Ler arquivo
SO recupera trecho solicitado
Escrever no arquivo
SO acrescenta ou altera contedo do arquivo no buffer
para depois transferir para o disco
Fechar arquivo
Toda informao contida no buffer atualizada no disco
e a rea do buffer liberada
Arquivos Funes na
linguagem C
Abrir arquivo (fopen)
FILE* fopen(char* nomearquivo, char* modo );

FILE tipo definido pela biblioteca padro que


representa uma abstrao do arquivo
A funo retorna um ponteiro para o arquivo,
caso no possa ser aberto retorna NULL
Arquivos Funes na
linguagem C
Abrir arquivo (fopen)
FILE* fopen(char* nomearquivo, char* modo );

nomearquivo pode ser relativo, e o sistema


procura no diretrio atual, ou absoluto, com
especificao completa que inclui diretrios
desde o raiz
Arquivos Funes na
linguagem C
Abrir arquivo (fopen)
FILE* fopen(char* nomearquivo, char* modo );

modo podemos abrir arquivo para leitura ou escrita


devemos especificar se o arquivo ser aberto em modo
texto ou binrio.
r read modo leitura
w write modo escrita
a append escrita no final do existente
t text modo texto
b binary modo binrio
Arquivos Funes na
linguagem C
Observaes:
Se arquivo j existe e solicitamos abertura para
escrita (w), o arquivo destrudo e cria um novo,
vazio.
Arquivos Funes na
linguagem C
Observaes:
Para preservar o arquivo abra com modo a
(append)
Pode adicionar contedo ao final
Em ambos os modos se no existia arquivo com o nome
passado, um novo criado
Arquivos Funes na
linguagem C
Observaes:
Tentar abrir arquivo para escrita em rea sem
permisso retorna NULL
Arquivos Funes na
linguagem C
Observaes:
Para abrir arquivo para leitura e escrita
acrescentamos + ao modo de abertura:
r+ leitura e escrita em arquivo existente
w+ leitura e escrita em arquivo novo

Modos b e t podem ser combinados aos demais


Exemplo
Crie um codigo em C para abrir um arquivo
para leitura em modo texto:
Exerccio
Crie um programa em C para abrir um arquivo
para leitura e escrita em modo texto.
O que preciso modificar para abrir o mesmo
arquivo em modo binrio?
Funes para ler dados
Principal funo de leitura em C:
int fscanf (FILE* f, char* formato, );
Similar a funo scanf
Dados capturados de arquivo previamente
aberto para leitura
A cada leitura, o cursor do arquivo avana e
passa a apontar para o prximo dado do
arquivo
Funes para ler dados
Principal funo de leitura em C:
int fscanf (FILE* f, char* formato, );
Primeiro parmetro ponteiro para o arquivo
Demais parmetros similar aos da funo
scanf
Indicada para leitura de dados numricos pois
interrompe a leitura quando encontra caractere
espao
Funes para ler dados
Outra funo:
int fgetc (FILE* f);
Dado o ponteiro do arquivo, captura o prximo
caractere e o cursor avana
O valor retornado o cdigo int do caractere
lido
Quando chega ao final do arquivo retorna a
constante EOF (End Of File), fim de arquivo.
Funes para ler dados
Outra funo:
char* fgets (char* , int n, FILE* f);
L uma sequncia de caracteres de um arquivo
At que encontre \n ou o numero de caracteres
informado indicada para leitura de strings
O valor de retorno o ponteiro para a cadeia de
caracteres ou NULL caso ocorra erro na leitura
Ex: alcanar fim de arquivo
Exerccios
Crie um arquivo texto com a frase Al Mundo!
Escreva um programa em C para ler a frase do
arquivo texto criado usando as trs funes de
leitura aprendidas: fscanf, fgetc, fgets.
Funes para escrever dados
int fprintf (FILE* f, char* formato, );
Anloga a funo printf, sendo que o primeiro
parmetro o ponteiro para o arquivo
O valor de retorno o nmero de bytes escritos no
arquivo
int fputc (int c, FILE* f);
Primeiro parmetro especifica o cdigo do caractere
que queremos inserir no arquivo
O valor de retorno o prprio caractere ou EOF se
ocorrer erro na escrita
Exerccios
Escreva um programa em C para criar um
arquivo contendo a frase Al Mundo!
utilizando a funo fprintf.
Abra o arquivo criado no modo leitura, e copie
a frase para outro arquivo texto.
Lembre de fechar os arquivos!
Exemplo 1
Considere que um arquivo de dados contm os valores
das dimenses (tam. max.: 100) e dos elementos de
duas matrizes de nmeros inteiros. Ex:
25
4 12 1 78 5
98 9 1994 0 52
79 12 458 2 29
47 19 784 12 8
Implemente um programa que calcule e exiba a matriz
resultante da soma dessas duas matrizes.
Exemplo 1
Algoritmo:
1) Criar duas matrizes
2) Ler o arquivo
3) Armazenar os dados do arquivo nas
matrizes
4) fazer a soma das matrizes
5) Imprimir a matriz resultante
Exemplo 1
Exemplo 1
Exemplo 1
Algoritmo:
1) Criar duas matrizes
2) Ler o arquivo!
3) Armazenar os dados do arquivo nas
matrizes!
4) fazer a soma das matrizes
5) Imprimir a matriz resultante
Exemplo 1
Exemplo 1
Aplicaes de Arquivos
Vimos um exemplo de como ler dados necessrios
a uma aplicao direto de um arquivo
Sabemos que o armazenamento de dados em
variveis temporrio, isto , os dados se
perdem quando o programa termina sua execuo.
Arquivos, por outro lado, so usados para manter
grandes quantidades de dados de forma
permanente.
Aplicaes de Arquivos
Aplicaes empresariais como, por exemplo,
controle de estoque, processam muitos dados e
no seriam possveis sem o uso de arquivos.
Como j foi dito, os arquivos so armazenados
em dispositivos de memria secundria como fitas
magnticas, discos magnticos e discos ticos.
Estes dispositivos podem reter grandes volumes
de dados por longos perodos de tempo.
Aplicaes de Arquivos
Considere que o programa que acabamos de
implementar recebesse duas matrizes de
tamanho 10 x 10
Para a entrada ser feita iterativamente, o usurio
teria que digitar 200 valores toda vez que
executasse a aplicao!!!
Armazenando em arquivos os dados podem ser
gerados aleatoriamente ou digitados apenas
uma vez.
Aplicaes de Arquivos
A linguagem C no impe estrutura alguma aos
arquivos.
Do ponto de vista fsico, um arquivo ,
simplesmente, uma sequncia de bytes.
Mas, do ponto de vista lgico, costuma-se
imaginar que os dados armazenados em
arquivos so organizados em registros.
Considere, por exemplo, um sistema de folha de
pagamento.
Aplicaes de Arquivos
Em um sistema como esse, cada registro
corresponde a um empregado e pode conter, por
exemplo, os seguintes dados:
Nmero de matrcula;
Nome do empregado;
Data de incio na empresa;
Departamento onde trabalha;
Categoria funcional.
Cada um dos dados que compem um registro
denomina-se campo.
Aplicaes de Arquivos
Abaixo um exemplo de organizao lgica de
dados em um arquivo:
Arquivo:

Registro: 1245 Pedro 12/03/1985 Recursos Humanos A05

Campo:
Aplicaes de Arquivos
Normalmente, a recuperao de dados em um
arquivo feita registro a registro.
Para facilitar a recuperao, pelo menos um campo
deve, univocamente, identificar o registro.
Este campo especial, que identifica um registro
especfico, conhecido como chave de registro.
No exemplo anterior, o nmero de matrcula pode
ser a chave do registro.
Exemplo 2
Considere que uma matriz de distncias
gerada aleatoriamente.
Implemente um programa que, dependendo da
escolha do usurio, simplesmente exiba a
matriz ou, ento, escreva a matriz gerada em
um arquivo.
Exemplo 2
Exemplo 2
Exemplo 2

stdout o dispositivo padro


de sada: o vdeo. Note que este
dispositivo tambm tratado
como um arquivo.
Exemplo 2
Dispositivos padres de
Entrada e Sada
Dispositivos padres de entrada e sada de
dados so reconhecidos como arquivos pela
linguagem C. Eles so designados por
constantes predefinidas:
Cosntante Significado Dispositivo

stdin Dispositivo padro de Teclado


entrada
stdout Dispositivo padro de Vdeo
sada
stderr Dispositivo padro de Vdeo
erro
stdaux Dispositivo padro de Porta serial
auxiliar
stdprn Dispositivo padro de Porta paralela
impresso
Dispositivos padres de
Entrada e Sada
No segundo exemplo, a matriz de distncias
gravada no arquivo representado pelo ponteiro
arq.
Dependendo da escolha, o arquivo ser o
dispositivo padro de sada (stdout) ou o
arquivo dados.txt.
Observao
As funes fscanf e fprintf so generalizaes
das funes scanf e printf, podendo ser usadas
para quaisquer tipos de arquivos.
J as funes scanf e printf s podem ser
usadas para os dispositivos padres (stdin e
stdout).
Exemplo 3
Um professor armazena em um arquivo as
seguintes informaes sobre seus alunos:
nmero (int), nome (string), notas de duas
avaliaes (float).
Implemente um programa para listar o
contedo deste arquivo e exibir a mdia das
notas das avaliaes.
Exemplo 3
Quando um arquivo contm informaes no
numricas, a leitura dos dados pode ser feita do
seguinte modo:
Ler toda uma linha do arquivo como um string;
Extrair do string lido substrings que correspondem aos
dados;
Converter cada substring para o tipo de dado
correspondente.
Para extrair os substrings, preciso que, no
arquivo, os dados estejam separados uns dos
outros por um delimitador, diferente de espao.
Exemplo 3
Exemplo de arquivo:
Exemplo 3
Exemplo 3
Exemplo 3
Exemplo 3
Observaes
Observe que, na funo strtok, o nome do vetor
usado apenas para extrair o primeiro token.
Para extrair os demais tokens, usa-se a
constante NULL como primeiro parmetro da
funo strtok.
Ateno!! Qualquer caractere diferente do
espao em branco pode ser usado como
delimitador.
Aplicaes de Arquivos
Resumo
Para utilizar um arquivo de dados, preciso
declarar um ponteiro para o tipo FILE.
Ex: FILE *arq;
Com isso, a varivel arq passa a representar,
dentro do programa, um arquivo de dados.
importante observar que um arquivo de dados
reconhecido pelo sistema operacional como
uma entidade externa ao programa.
Aplicaes de Arquivos
Resumo
Antes que um arquivo possa ser utilizado, preciso
informar ao sistema operacional onde localizar o
arquivo e como se pretende usar o arquivo.
Esta operao conhecida como abertura do
arquivo e executada pela funo fopen.
arq = fopen("matrizes.txt","r");
A funo fopen tem dois parmetros do tipo string. O
primeiro parmetro especifica o nome do arquivo e,
eventualmente, onde localiz-lo.
Aplicaes de Arquivos
Resumo
A abertura de um arquivo, se bem sucedida, retorna em uma
estrutura do tipo FILE vrias informaes (dados de
ponteiros de arquivo)
um ponteiro para permitir que seus campos sejam
alterados por outras funes (ex: fscanf)
Alguns exemplos dessas informaes so:
um ponteiro para o buffer associado ao arquivo;
o tamanho do buffer;
a indicao se o buffer est cheio ou vazio;
um ponteiro para o dado atual no arquivo.
Se, por alguma razo, o arquivo no puder ser aberto, a
funo fopen ir retornar a constante NULL
Aplicaes de Arquivos
Resumo
O segundo parmetro da funo fopen especifica o
que deve ser feito com os dados.
As possibilidades so:
Ler os dados existentes;
Gravar dados apagando (caso existam) os dados
existentes;
Anexar novos dados aos j existentes.
No programa exemplo 1, a instruo abaixo
especifica o modo r, ou seja, ler (read) os
dados existentes.
Aplicaes de Arquivos
Resumo
Da mesma forma que um programa deve abrir um
arquivo antes de us-lo, deve tambm fechar o
arquivo quando no precisar mais dele.
fclose(arq);
O fechamento de um arquivo instrui o sistema
operacional a:
esvaziar os buffers associados ao arquivo;
liberar os recursos do sistema que o arquivo consumiu.
Aplicaes de Arquivos
Resumo
Se o fechamento do arquivo for bem sucedido,
a funo fclose retorna o valor 0.
Se ocorrer um erro, fclose retorna a constante
EOF, definida em stdio.h (igual a -1).
Se no forem fechados pela funo fclose, todos
os arquivos abertos sero fechados quando o
programa terminar sua execuo
Exerccio
Modifique o programa do exerccio 3 de modo
a permitir que novos alunos sejam includos no
arquivo durante a execuo.
Estruturas de Dados para Pesquisa e
Ordenao - Arquivos
Profa Brbara Quintela

barbaraquintela@pucminas.cesjf.br

You might also like