Você está na página 1de 41

Tratamento de Ficheiros - Mod 6

•Conhecer as regras da declaração de ficheiros


•Dominar técnicas de processamento de ficheiros
•Elaborar programas que recorram a ficheiros como suporte de dados
•Conhecer as operações específicas para manipular ficheiros de texto
•Dominar as técnicas de processamento de ficheiros de texto
•Elaborar programas que recorram a ficheiros de texto como suporte de
dados
Ficheiros

Nos módulos anteriores, todos os programas que implementaram


solicitavam ao utilizador os dados que o programa manipulava.

Uma vez terminado o programa todos os dados introduzidos ou resultados


do programa eram perdidos, pois não eram armazenados de forma
definitiva num arquivo permanente.

A utilização de ficheiros pode ser vista de dois modos:


•O ficheiro é a fonte de dados para o programa (input);
•O ficheiro é o destino dos dados gerados pelo programa (output).
Operações básicas sobre ficheiros

Para processar um ficheiro, a primeira operação a efetuar é ligar


uma variável do nosso programa a esse ficheiro (chama-se a isto,
Abertura do Ficheiro). Evita-se assim estar permanentemente a
escrever o nome completo do ficheiro sempre que temos
necessidade de nos referirmos a ele.

Depois de aberto um ficheiro, podemos realizar todas as operações


– ler dados, escrever dados, posicionarmo-nos ao longo do ficheiro,
etc.
Abertura de um ficheiro

As operações de abertura de um ficheiro, traduzem-se em inglês por


open, no entanto em C todas as funções de processamento de ficheiros
são precedidas por um f de forma a melhor indicar que se tratam de
funções sobre ficheiros. Sendo assim a função que permite abrir um
ficheiro é a função fopen.

Para poder utilizar um ficheiro tem que se declarar uma variável do tipo
FILE (ou mais propriamente um apontador para o tipo FILE).

Exemplo: int x, y;
float z;

FILE *fp;
Abertura de um ficheiro

A abertura de um ficheiro é realizada utilizando a função fopen.


A sua sintaxe é a seguinte:

fopen (“ficheiro”, “modo”)

ficheiro – string contendo o nome do ficheiro (ex: dados.txt)

modo – string contendo o modo de abertura do ficheiro


Modos de abertura de um ficheiro

“r“ – read (abertura do ficheiro para leitura)


Caso não o possa abrir (por não ter permissões, por ex.) a função
devolve NULL.

“w“ – write (abertura do ficheiro para escrita)


É assim criado um novo ficheiro. Se já existir um ficheiro com o
mesmo nome, é apagado e criado um novo, perdendo-se toda a
informação. Caso não o possa criar a função devolve NULL.

“a“ – append (abertura do ficheiro para acrescento)


Se o ficheiro não existir, funciona como o modo “w”. Se o ficheiro já
existir, coloca-se no final deste de forma a permitir a escrita dos
dados.
Fechar ficheiro
Devemos fechar sempre o ficheiro no final do nosso programa,
tal como fechamos sempre um carro depois de sairmos,
senão:
Fechar ficheiro

Embora os ficheiros sejam automaticamente fechados


quando uma aplicação termina, é um bom hábito dos
programadores realizarem eles mesmo esta operação,
evitando assim graves problemas (os dados presentes em
memória não serem colocados no ficheiro e este ficar
instável, podendo até perder os dados).

A sintaxe utilizada para fechar ficheiros é:

fclose (ficheiro)
Exemplo de tratamento de um ficheiro

Faça um programa para criar um ficheiro chamado


“dados.txt” que armazene o texto “Bom dia!”

1. Criar um ponteiro para FILE.


2. Abrir o arquivo.
3. Ler ou gravar dados no arquivo.
4. Fechar o arquivo.
Exemplo de um exercício

#include <stdio.h> O programa indica se podemos ou não abrir um ficheiro


main ( )
{ abrirficheiro.c
FILE *fp;
char nome[100];
puts (“Introduza o nome do ficheiro: “);
scanf(“%s”,nome); abrir o ficheiro no
fp = fopen (nome, “r”); modo de leitura
if (fp ==NULL)
printf (“Impossível abrir o ficheiro %s\n”, nome);
else
{
printf (“Ficheiro %s aberto com sucesso!!!\n”,nome);
fclose (fp);
}
} fechar o ficheiro
Leitura e escrita de strings
num ficheiro
A função mais utilizada para escrever strings formatadas
num ficheiro é a seguinte:

fprintf (ficheiro, TIPO)

Exemplo: fprintf (fp, “%d”, nota);

A função mais utilizada para ler strings de um ficheiro é a


seguinte:

fscanf (ficheiro, TIPO)

Exemplo: fscanf (fp, “%d”, &nota);


Exercícios

1. Faça um programa que escreva no ficheiro escola.txt


informação sobre o número, nome, nota de 3 alunos.

ex_fprintf.c

2. Faça um programa que leia do ficheiro escola.txt


informação sobre o número, nome, nota de 3 alunos e
mostre no ecrã.

ex_fscanf.c
Exercícios

3.Construa um programa que leia um valor em polegadas e


coloque num ficheiro (milimetros.txt) o seu valor em
milímetros, sabendo que: fpolegadas.c
1 polegada=25 mm
4.Construa um programa que leia um número inteiro e
escreva num ficheiro (numero.txt) uma mensagem indicando
se este número é par ou ímpar, e se é positivo ou negativo.
fnumero.c
5.Elabore um programa, que peça os dados relativos ao
nome e idade de três pessoas e no final escreva no ficheiro
(velha.txt) qual o nome da pessoa mais velha. fmaisvelha.c
(NOTA: As pessoas têm sempre idades diferentes)
Exercícios
6.Crie um ficheiro de texto com o seguinte conteúdo:
Rui 15
notas.txt
Patrício 14
Adrien 9
Slimani 17
Montero 6
7.Escreva um programa que abra o ficheiro de texto (notas.txt) e mostre
os nomes dos alunos e respetivas notas com negativas (<10) e depois
mostre os nomes dos alunos e respetivas notas com positivas (>=10).

notasposneg.c
8.Crie um programa em C que mostre todo o conteúdo do ficheiro notas.txt
e depois mostre a média das notas.
fichmedia.c
Leitura de carateres de um ficheiro

O problema é que certamente existem alturas que não


sabemos que tipos de dados temos no ficheiro, por isso temos
de ler carater a carater. A função mais utilizada para ler
carateres de um ficheiro é a seguinte:

fgetc (ficheiro)
A função fgetc lê um carater no ficheiro passado por parâmetro
(previamente aberto pela função fopen) e devolve-o como
resultado da função. Se por acaso já não existir qualquer
carater no ficheiro, isto é, se a função detetar uma situação de
End-Of-File devolve a constante EOF.
Exemplo
#include <stdio.h>
main (){
FILE *fp; lerficheiro.c
char ch, s[100];
puts ("Introduza o nome do ficheiro: ");
gets (s);
fp=fopen(s,"r"); abrir o ficheiro

if (fp==NULL)
printf ("Impossível abrir o ficheiro %s\n", s);
else { Coloca no ecrã os
carateres lidos um a
while ((ch=fgetc(fp))!=EOF)
um até chegar ao fim
printf(“%c”, ch); do ficheiro.
fclose (fp);
}
}
Exercícios

Crie um ficheiro de texto (dado.txt) que contenha o nome


completo da disciplina (programação de sistemas
informaticos) e depois elabore um programa em C que faça
duas coisas:
• leia o conteúdo desse ficheiro e o mostre no ecrã;
• leia o conteúdo desse ficheiro até ser encontrado o
carater ‘f’ e mostre no ecrã;
lerPSI.c

Escreva um programa que abra um ficheiro de texto e conte


o número de carateres.
contacarateres.c
Escrita de carateres num ficheiro

A escrita de carateres em ficheiro pode ser realizada


recorrendo à função:

fputc (ch, ficheiro)

Escreve o carater ch no ficheiro.

Esta função devolve o carater ch em caso de sucesso ou


EOF em caso contrário.
Exemplo
#include <stdio.h>
main ( )
{ escreverficheiro.c
FILE *fp;
int i;
char s[100], texto[100];
puts ("Introduza o nome do ficheiro: ");
gets (s);
fp=fopen(s,"w");
if (fp==NULL)
printf ("Impossível criar o ficheiro %s\n", s);
else {
puts ("Escreva o texto: ");
gets (texto);
for (i=0;i<=99;i++) //for (i=0;i<=strlen(texto);i++)
fputc (texto[i],fp);
fclose (fp);
} }
Ler várias linhas de um ficheiro
Se a leitura de linhas a partir do teclado se faz através da
função gets, então a leitura de linhas a partir de um ficheiro de
texto é feita através da função fgets, cuja sintaxe é:

fgets (str, tamanho, ficheiro);

a string que vai ficar com o valor lido


o limite máximo de carateres por linha a serem lidos
o ficheiro a ser lido
Escrever várias linhas de um ficheiro
Se a escrita de linhas a partir do teclado se faz através da
função puts, então a escrita de linhas num ficheiro de texto é
feita através da função fputs, cuja sintaxe é:

fputs (str, ficheiro);

a string a ser escrita


o ficheiro onde vai escrever

Como a função fputs só coloca uma string no ficheiro, teremos


de criar um ciclo para colocar várias strings.
Filtros

Um filtro é um programa que recebe informação a partir de um


ficheiro e a processa (filtra) segundo algum critério.
Por exemplo, podemos ter filtros que nos mostrem apenas as
linhas pares de um ficheiro, ou as linhas que contenham uma
determinada expressão, etc.
historia.txt
era era
uma uma
vez vez
uma historia.c
menina

EXEMPLO: Crie um ficheiro de dados com o conteúdo da história acima


e depois elabore um programa em C que pergunte quantas linhas do
ficheiro deve mostrar.
#include <stdio.h>
main ( )
nlins → variável que serve para
{
guardar o valor do nº linhas a
FILE *fp;
mostrar
int i=0,nlins;
char s[80];
printf ("Quantas linhas deseja ler?: ");
scanf ("%d", &nlins);
fp=fopen(“historia.txt","r");
if (fp==NULL)
printf ("Impossível abrir o ficheiro\n");
else
{
while (i!=nlins)
{
fgets(s,80,fp); Mostra o conteúdo do ficheiro
printf (“%s”,s); enquanto o contador i (que é somado
i++; de 1 em 1) for menor que o nº de
} linhas que o utilizador pediu, assim
fclose (fp); conseguimos que ele só mostre o nº
} de linhas desejadas
}
Exercícios
1.Crie num ficheiro chamado euro.txt a listagem dos 23
jogadores que irão disputar o Euro 2016:
1. Beto 12. Rui Patricio
euro.txt 2. Antunes 13. José Fonte
3. Bruno Alves 14. João Mário
4. Cédric 15. André Gomes
5. Eliseu 16. Adrien Silva
6. Ivo Pinto 17. Fábio Coentrão
7. Cristiano Ronaldo 18. Danny
8. Pepe 19. Tiago
9. Ricardo Carvalho 20. Vieirinha
10. João Moutinho 21. William Carvalho
11. Nani 22. Éder
23. Quaresma

2.Elabore um programa em C que vá ler o ficheiro euro.txt


criado anteriormente mas que mostre apenas os jogadores
cujos números estejam entre 1 e 11.
euro_1_11.c
Exercícios
3. Elabore um programa em C que pergunte um
número de 1 a 23 ao utilizador e depois vá ler o
ficheiro euro.txt criado anteriormente e mostre
qual o jogador que usa esse número.

euro_num.c

4. Elabore um programa em C que vá ler o ficheiro


euro.txt criado anteriormente mas que mostre
apenas os jogadores cujos números sejam pares.
euro_pares.c
Exercícios
6. Escreva um programa que abra um ficheiro de
texto e conte o número de linhas em branco.
contabrancos.c
7. Crie um programa que mostre todo o conteúdo do
ficheiro euro.txt e depois peça ao utilizador para
acrescentar um novo jogador (exemplo: 24 –
Tiago). Depois volte a mostrar o conteúdo do
ficheiro.
euro_nome.c
Exercícios
8.Escreva um programa em C que permita ler os dados de dez
jogadores de futsal, anteriormente gravados em “futsal.txt”.
Cada jogador possui os seguintes campos: número da
camisola (igual ao número da linha), nome, posição e idade.
Faça com que o programa possua um menu com as seguintes
opções: //////////////////// FUTSAL //////////////////////
1 - Mostrar os dados dos 10 Jogadores futsal.c
2 - Procurar jogador pelo número da camisola
X - Sair
/////////////////////////////////////////////////////
Elabore o programa de modo que, para cada uma das opções
do menu, ele faça a função respetiva.
A função feof
Este tipo de função serve para saber se foi atingido o fim de um ficheiro.
Exemplo: ler um ficheiro até ao fim:
main()
{ exemplofeof.c
FILE *fp;
char c;
fp=fopen(“historia.txt","r");
if (fp==NULL)
printf ("Impossivel abrir o ficheiro\n");
else
while(!feof(fp))
{
c = getc(fp); Enquanto não chegarmos
ao final do ficheiro…
printf("%c", c);
}
fclose(fp);
}
Exercícios
Escreva um programa para uma mesa de voto de 320 alunos para a
associação de estudantes da escola:
Cada estudante tem 3 hipóteses de voto:
C - (voto na lista C) eleicoes.c
V - (voto na lista V)
0 - (voto em branco)

•cada votação é guardada no ficheiro “eleicoes.txt”;


•cada votação deve ser confirmada, inclusive o voto em branco; se
não coincidir, manda repetir o voto;
•no final o programa deve informar a quantidade de votos das três
opções e dizer qual foi a lista vencedora.
Exercícios
1.Escreva um programa que conta, num ficheiro, o número
de ocorrências de um determinado carater. O ficheiro e o
carater são ditos pelo utilizador. Utilize a função fgetc().

carater.c

2.Escreva um programa que peça um número inteiro ao


utilizador e depois crie um ficheiro de texto (asteriscos.txt)
composto por esse número de linhas e colunas de asteriscos
(*).
asteriscos.c
Exemplo: Diga um número: 4
Cria um ficheiro com este conteúdo 
Exercícios
3.Construa um programa que peça dois números e guarde-os num ficheiro
(nums.txt). Posteriormente deverá pedir ao utilizador para escolher uma
operação: Somar, Subtrair, Multiplicar, Dividir, devendo em função dessa
escolha, devolver o resultado. NOTA: O programa tem de ir “buscar” os
números ao ficheiro
operacoes.c

4.Faça um programa que crie um ficheiro (multiplos.txt) com o cálculo dos


múltiplos de um número pedindo o número de vezes que esse número
deve ser multiplicado.
Escreve isto no ficheiro

fmultiplos.c
Exercícios
5. Crie um programa que mostre o conteúdo de um ficheiro e
acrescente para cada linha, o número respetivo.
Exemplo:
Ás armas 1: Ás armas
colocarnumeros.c
Os barões 2: Os barões
Assinalados 3: Assinalados
Luís de Camões 4: Luís de Camões

no FICHEIRO no ECRÃ

6. Escreva um programa que solicite ao utilizador 10


números reais, e guarde-os num ficheiro (numeros.txt).
Em seguida deve solicitar ao utilizador um nº entre 1 e 10
e mostrar o valor que tinha introduzido nessa ordem.
numeros1e10.c
Exercícios
Elabore um programa em C que permita tratar os dados dos vários
vencedores das maratonas olímpicas. Essa informação está no ficheiro
maratona.txt. Faça com que o programa possua um menu com as
seguintes opções:
XXXXXXXXXXXXXX MARATONA OLÍMPICA XXXXXXXXXXXXX
1 – Acrescentar dados sobre um novo campeão (Jogos Olímpicos
do Rio 2016)
2 – Procurar atleta pelo ano em que venceu
3 – Listar os dados de todos os campeões
0 – Sair
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Elabore o programa de modo que, para cada uma das opções do menu, ele
faça a função respetiva.
maratona.c
Exercícios

Elabore um programa em que são pedidos dois ficheiros


origem a um utilizador (por exemplo A e B), depois pretende-
se construir um outro ficheiro (fusao.txt), com a totalidade do
conteúdo de A e de B.

fusao.c
Exercícios dentalix.c

Elabore um programa em C que guarde num ficheiro


(dentalix.txt) dados sobre os pacientes de uma clínica dentária.
Cada paciente possui os seguintes campos: número de
paciente, nome, localidade, sexo, telefone, idade. Faça com
que o programa possua um menu com as seguintes opções:
---------------------------- D E N T A L I X
--------------------------- (I)nserir paciente
(L)istar os dados de todos os pacientes
(M)ostrar apenas os pacientes do sexo feminino
(C)alcular a média das idades dos pacientes
(S)air
---------------------------------------------------------------------------
Elabore o programa de modo que, para cada uma das opções do menu, ele faça a
função respetiva.
Exercícios

Escreva um programa que esteja sempre a pedir valores inteiros e


a guardá-los num ficheiro (inteiros.txt). A inserção de valores
termina com a introdução do número -99. Quando isso acontecer o
programa deverá mostrar a soma e a média de todos os valores.

somafich.c
Exercícios
Escreva um programa que abra o ficheiro contas.txt (deverá criá-lo
anteriormente) e mostre o resultado das operações que esse ficheiro
contém.
contas.txt
contasfich.c 3+2
5*3
3*5
10/5
-5-7
2*-4
Crie um programa que leia um ficheiro e o mostre de trás para a frente,
isto é, começando da última linha para a primeira.

trasfrente.c
Exercícios
Elabore um programa em C que guarde num ficheiro (farmacia.txt) dados
sobre os clientes de uma farmácia. Cada cliente possui os seguintes
campos: nome, localidade, sexo, telefone e ano de nascimento. Faça com
que o programa possua um menu com as seguintes opções:
--------------------------- F A R M Á C I A ---------------------------
1 - Inserir cliente farmacia.c
2 - Calcular a média das idades dos clientes
3 - Mostrar apenas os clientes do sexo masculino
4 - Mostrar todos os clientes com telefone fixo (21…)
5 - Mostrar clientes que vão passar os 65 anos até 2020
6 - Mostrar clientes que se chamam Maria
0 - Sair
----------------------------------------------------------------------------------
Elabore o programa de modo que, para cada uma das opções do menu, ele
faça a função respetiva.
Exercícios
Faça um programa que simule uma máquina de venda de
chocolates.
Para isso o programa deverá pedir o chocolate desejado e o
pagamento dado para o comprar. Depois escreve no ficheiro
(troco.txt) as moedas necessárias para dar o troco.

São aceites estas moedas: 2 euros, 1 euro, 50 cêntimos, 20


cêntimos, 10 cêntimos, 5 cêntimos, 2 cêntimos e 1 cêntimo.
Existem três tipos de chocolate: grande = 1,25€
médio = 0,78€ chocolates.c
pequeno = 0,31€
Exercícios

Faça um programa que escreva num ficheiro (triangulos.txt) o tipo de triângulo

correspondente. Inicialmente, determine se os valores x y z digitados formam um

triângulo. Supondo que x,y,z, sejam os valores lidos, então:

Se x<y+z ou y<x+z ou z<x+y então x,y,z são lados de um triângulo e se:

x=y=z escreve no ficheiro “triângulo Equilátero”

x=y ou x=z ou y=z escreve no ficheiro “triângulo Isósceles”

x<>y<>z escreve no ficheiro “triângulo Escaleno” triangulos.c


Elabore um programa que peça o nome de um ficheiro ao utilizador e diga

quantas vezes aparece o caracter ‘a’ ou ‘A’.

conta_as.c
Exercícios
Crie um programa que escreva num ficheiro de texto (pauta.txt) uma
pauta de 7 alunos com a seguinte informação: nome do aluno;
classificação do teste; classificação do exame.

pauta.c

Depois, escreva um programa em C que crie outro ficheiro


(aprovados.txt), contendo o nome do aluno e a classificação final,
correspondente à melhor das duas notas desse aluno no ficheiro
pauta.txt. Deve escrever apenas os alunos com classificação final
igual ou superior a 10.
aprovados.c

Você também pode gostar