Buscar

M7 - Tratamento de Ficheiros - parte 2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Módulo 7
Tratamento de Ficheiros
PSI 1º ano
2018/2019
TGPSI - Paulo Reis - Agrupamento de Escolas da Batalha 2
Tratamento de Ficheiros
- Parte 2 -
3
Linguagem C
Ficheiros de Texto
4
 Antes de se começar a ler ou escrever num ficheiro, deve ser
chamada a função fopen() para abrir o ficheiro.
 A função fopen() tem 2 argumentos: o primeiro é o nome do
ficheiro e o segundo indica se o ficheiro vai ser aberto para
leitura ou escrita ("r" ou "w" respetivamente. Estes nomes vêm
do inglês, r-read, w-write).
 Depois de abrir o ficheiro deve-se testar se a operação foi bem
sucedida. Para tal, compara-se o valor de f com a constante
NULL.
 Caso haja um erro, podemos escrever no ecrã uma mensagem
de erro e terminar o programa.
 Se o ficheiro foi aberto com sucesso, poderemos ler e escrever.
 No final, devemos fechar os ficheiros (anteriormente abertos)
com a função fclose().
Abertura e fecho de ficheiros de texto
5
 Antes de se começar a ler ou escrever num ficheiro, deve ser chamada a função fopen() para abrir o
ficheiro.
 A função fopen() tem 2 argumentos: o primeiro é o nome do ficheiro e o segundo indica se o ficheiro vai
ser aberto para leitura ou escrita ("r" ou "w" respetivamente. Estes nomes vêm do inglês, r-read, w-write).
 Depois de abrir o ficheiro deve-se testar se a operação foi bem sucedida. Para tal, compara-se o valor de
f com a constante NULL.
 Caso haja um erro, podemos escrever no ecrã uma mensagem de erro e terminar o programa.
 Se o ficheiro foi aberto com sucesso, poderemos ler e escrever.
 No final, devemos fechar os ficheiros (anteriormente abertos) com a função fclose().
6
Ficheiros de Texto
 Ficheiro de texto - armazena carateres que podem ser
mostrados diretamente no monitor do computador ou
modicados por um editor de textos simples.
7
 As operações de entrada e saída do C, incluindo as relacionadas a ficheiros, 
encontram-se na biblioteca stdio.h que também define várias macros, dentre 
elas NULL e EOF (apontador nulo e o fim de ficheiros, respetivamente). Além 
disso, é nela que está definido o tipo FILE.
 Um ficheiro de texto não é mais do que uma sequência de caracteres 
que ficam armazenados no disco do computador. 
 Esta sequência de caracteres é terminada com um caracter especial 
denominado fim-de-ficheiro (EOF). (Este caracter especial não é 
visível no ficheiro)
EOF
8
 Um ficheiro de texto pode ser criado com um editor de texto. É 
precisamente isso que fazem nas aulas práticas quando escrevem os 
vossos programas. No entanto, nada impede que escrevam outras 
coisas. Com um editor de texto, podem escrever cartas, poesias, 
relatórios de trabalhos, e claro que também podem escrever programas 
em C.
 Em C, podemos dar instruções ao programa para ler e escrever em 
ficheiros de texto, em vez de ler do teclado e escrever no ecrã. Isto 
tem a vantagem de não se ter de estar sempre a introduzir os dados.
9
Leitura e escrita em ficheiros de texto
 Para um programa ler e escrever em ficheiros de texto,
podemos utilizar as funções fscanf() e fprintf().
 Estas funções são praticamente iguais ao scanf() e
printf(). A única diferença é que as funções têm um
argumento adicional que indica o ficheiro em que se
pretende ler ou escrever. Exemplo:
fscanf( f, "%d", &n );
 A variável f é uma variável que tem de ser associada
previamente a um ficheiro, e que se declara como sendo
do tipo FILE (exemplo: FILE *f;).
10
 A leitura e escrita são feitas sequencialmente do inicio para o
fim do ficheiro.
 O código-exemplo que se segue é um programa que lê dois
números de um ficheiro chamado "dados.txt" e escreve o
quadrado desses números num ficheiro novo chamado
"resultados.txt“.
Código-exemplo
11
fichTexto01.c
12
13
 É possível ler ou escrever dados de forma formatada em 
ficheiros através das funções fscanf() e fprintf().
int fscanf(FILE *fich, const char *format, ...);
int fprintf(FILE *fich, const char *format, ...);
 Estas funcionam da mesma forma que as funções padrão scanf() e 
printf(), tendo apenas mais um parâmetro inicial que corresponde ao 
ficheiro onde o processamento irá ser realizado.
 A função fscanf() devolve EOF se tiver detetado o final do 
ficheiro (End-of-File) ou devolve o número de parâmetros 
que conseguir ler com sucesso.
Input e Output formatado
14
 Em C, também existem funções específicas que permitem 
ler um carater e escrever um carater: getchar() e putchar().
 Também existem as respetivas variantes que permitem 
ler/escrever um carater de/para um ficheiro. Essas funções 
são fgetc() e fputc().
char c; 
c = fgetc(f); /*equivalente a fscanf(f,"%c",&c) */
fputc('z'); /* equivalente a fprintf(f, "z") */ 
15
Leitura caracter a caracter
 O programa-exemplo apresentado anteriormente 
(fichTexto01.c) não faz qualquer tipo de validação. Por 
exemplo, se o ficheiro de entrada tiver apenas um número, 
o programa irá funcionar mal. Ao tentar fazer o segundo 
fscanf(), o programa já vai estar a aceder a coisas que 
estão depois do fim-de-ficheiro. Isso é equivalente a termos 
um vetor de dimensão 10 e tentarmos aceder à posição 12!
 A solução para este problema é verificar se já chegamos ao 
fim do ficheiro imediatamente antes de tentarmos ler 
qualquer coisa. Na biblioteca padrão stdio.h existe uma 
constante chamada EOF (end of file) que significa fim-de-
ficheiro.
16
 O código-exemplo que se segue programa que converte o 
conteúdo de um ficheiro de texto para maiúsculas. A ideia é 
abrir o ficheiro de entrada e ir lendo os carateres um após 
outro até chegar ao fim do ficheiro. Cada caracter lido é 
convertido para maiúsculas e escrito para o ficheiro de 
saída.
Código-exemplo
17
fichTexto02.c
18
Nota: A função toupper() está definida em ctype.h e converte o caracter de 
entrada para maiúscula.
19
 Vamos supor que temos um ficheiro chamado nomes.txt
cujo conteúdo são nomes de pessoas, um nome por linha. 
Pretende-se fazer um programa que leia esses nomes para 
um vetor de nomes.
Código-exemplo
20
fichNomes.c
21
Nota: Falta codificar a saída do vetor para exibir no ecrã.
22
 Principais funções de manipulação de ficheiros da biblioteca stdio.h
Função O que faz?
fopen() Abre um ficheiro.
fclose() Fecha o ficheiro garantindo a transferência do buffer.
fflush() Descarrega o buffer.
fscanf() Leitura de entrada formatada (semelhante ao scanf()).
fprintf() Escrita de saída formatada (semelhante ao printf()).
fgets() Obtém uma string do ficheiro.
fgetc() Obtém um carácter do ficheiro.
fputs() Insere uma string no ficheiro.
fputc() Insere um carácter no ficheiro.
fread() Lê um bloco um bloco de dados do ficheiro.
fwrite() Escreve um bloco de dados no ficheiro.
fseek() Reposiciona o apontador no ficheiro.
rewind() Reposiciona o apontador para o início do ficheiro.
ftell() Retorna a posição do apontador.
23
 Modos de abertura de ficheiros
Modo O que faz?
“r” Abre o ficheiro somente para leitura, a partir do início. O ficheiro deve existir.
“w” Cria um ficheiro vazio para escrita. Se já existir o ficheiro, este será perdido.
“a” Adiciona no final do ficheiro. Se o ficheiro não existir, a função cria-o.
“r+” Abre o ficheiro para leitura e escrita, a partir do início. O ficheiro deve existir.
“w+” Cria um ficheiro vazio para leitura e escrita. Se já existir o ficheiro, este será 
perdido.
“a+” Abre para adição ou leitura no final do ficheiro. Se o ficheiro não existir, a 
função cria-o.
No Windows, o caracter “b” pode ser adicionado ao modo (ex: “ab”, “w+b”) para 
especificar que o ficheiro deve ser aberto no modo binário. Em sistemas POSIX 
(inclusive Linux), este caracter é ignorado. Também é possível utilizar o caracter 
“t”, para abertura de no modo texto.
Prontos para a ação ?!
24
Hora de resolver…
25
1) Implementar no programa-exemplo fichTexto01.c uma rotina 
de validação para detetar o fim de ficheiro.
2) Implementar no programa-exemplo fichTexto02.c uma rotina 
de modo a pedir ao utilizadorpara introduzir o nome dos ficheiros 
de entrada e saída.
3) Supor que existe um ficheiro que contém 
em cada linha o nome de um aluno 
(apenas uma palavra) e a sua respetiva 
classificação (0 a 20) numa qualquer prova 
final.
Escrever um programa que mostre no ecrã apenas os alunos que 
obtiveram aprovação e respetivas notas (classificação >=10) na 
disciplina a que o ficheiro corresponde.
26
4) Implementar um programa que abra um ficheiro de texto indicado 
pelo utilizador e conte o número de caracteres existentes no 
ficheiro e que faça a impressão do número de caracteres no ecrã. 
6) Implementar um programa que lê um número N e que gere N 
números inteiros (entre 0 e 100) para guardar todos num ficheiro de 
texto. A primeira linha do ficheiro deverá conter a quantidade de 
números e as restantes os números gerados, cada linha com o 
máximo de 10 números.
7) Implementar um programa que crie um ficheiro de texto contento 
os nomes das capitais de distrito e respetivas temperaturas máxima 
e mínima num dado dia. 
Hora de resolver…
5) Implementar no programa-exemplo fichNomes.c uma rotina de 
exibir os dados inseridos no vetor.
27
8) Escrever e testar uma rotina destinada a gerir a abertura de 
um ficheiro com proteção relativamente a erros.
A proteção relativamente a erros coloca-se da seguinte forma: 
• se a abertura for para leitura ou acrescentar linhas temos 
de verificar se o ficheiro já existe;
• se a abertura for para escrita não devemos permitir criar 
inadvertidamente (e, consequentemente, apagar) um 
ficheiro que já existe.
28

Outros materiais