• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Hipnoted

[C] Manipulação de ficheiros - I

16 mensagens neste tópico

Vou ensinar a mexer um pouco com ficheiros.

O problema é simples, fazer um programa que leia um ficheiro (ficheiro 1) e que escreva as linhas pares para outro ficheiro (ficheiro 2).

Primeiro é preciso criar dois ficheiros de texto (.txt) com os nomes ficheiro1 e ficheiro2. Abre-se o ficheiro1.txt e escreve-se algumas palavras em meia dúzia de linhas.

O código é o seguinte:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
FILE *fp1, *fp2;
int contador=0;
char linha[200];
fp1 = fopen("ficheiro1.txt","r");
fp2 = fopen("ficheiro2.txt","w");

while(fgets(linha,200,fp1))
{
	contador++;
	if(contador%2 == 0)
	{
		  fputs(linha,fp2);
	}
}
fclose(fp1);
fclose(fp2);
}

Explicação do Código

1º Definir os apontadores para os ficheiros (fp1 e fp2);

2º Definir a variável linha que vai ser usada para conter o buffer de cada linha do primeiro ficheiro. Definir um contador, inicializando a zero. Serve para testar se as linhas lidas são pares (quando o contador é um número par) ou se são ímpares;

3º Abrir os dois ficheiros, um para leitura e outro para escrita:

fp1 = fopen("ficheiro1.txt","r");
fp2 = fopen("ficheiro2.txt","w");

4º Enquanto houver linhas para ler, é lida uma linha de cada vez do ficheiro1

while(fgets(linha,200,fp1))

.

É incrementado o contador porque foi lida mais uma linha do ficheiro 1.

Se o resto da divisão inteira por 2 for zero, que significa que a linha lida é par, escrevemos essa linha no ficheiro2

fputs(linha,fp2);

5º Fechar os ficheiros com o fclose.

Compila-se gerando um executável. Clicar no executável. Para haver sucesso os ficheiros .txt têm de estar na mesma directoria que o executável.

Qualquer dúvida é só dizer.

[Artigo no Wiki]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porreiro :)

Até gosto de C os apontadores é que estragam tudo :) Java ao poder :D

Bom tutorial  :thumbsup::D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Até gosto de C os apontadores é que estragam tudo :D Java ao poder :)

É verdade que quem tem pavor aos apontadores, JAVA oferece um mar de rosas porque não tem.

Mas os apontadores não são uma coisa por aí além, difícil é perceber como eles funcionam. Quando souberes até preferes os apontadores a outro método qualquer..  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Posso dizer que a unica cadeira que tive em C foi Estruturas de dados 2 e comparando com estruturas de dados 1 que é em java xiiii nem comento :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Posso dizer que a unica cadeira que tive em C foi Estruturas de dados 2 e comparando com estruturas de dados 1 que é em java xiiii nem comento :thumbsup:

Eu comecei ao contrário. Dei primeiro C e depois JAVA. E acho que é melhor...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas nós na demos primeiro java porque é a linguagem usada em mais cadeiras da faculdade.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

while(fgets(linha,200,fp1))
    {
        contador++;
        if(contador%2 == 0)
        {
              fputs(linha,fp2);
        }
    }

este ciclo é o que percorre o fp1? e consequentemente escreve esse "percurso" no fp2 certo??

este ciclo percorre o ficheiro até EOF ??

Boa explicação btw

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim sem duvida alguma apos perceber apontadores não queres outra coisa :D :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu estou a fazer um trabalho para a cadeira de programacao em c esse programa consiste em criar um programa que permita calcular se um aluno tem direito a bolsa de estudo mas tambem tem de guardar os dados de um aluno num ficheiro. o programa deve permitir inserir , alterar , pesquisar eliminar etc esses dados a minha principal duvida e como e que eu altero os dados de um determinado aluno sem os apagar todos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu estou a fazer um trabalho para a cadeira de programacao em c esse programa consiste em criar um programa que permita calcular se um aluno tem direito a bolsa de estudo mas tambem tem de guardar os dados de um aluno num ficheiro. o programa deve permitir inserir , alterar , pesquisar eliminar etc esses dados a minha principal duvida e como e que eu altero os dados de um determinado aluno sem os apagar todos

Carregas todos os dados do ficheiro para memória, alteras a informação no runtime e depois no fim gravas para o ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ha a possibilidade de me darem um exemplo de como se faz isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

while(fgets(linha,200,fp1))
    {
        contador++;
        if(contador%2 == 0)
        {
              fputs(linha,fp2);
        }
    }

este ciclo é o que percorre o fp1? e consequentemente escreve esse "percurso" no fp2 certo??

este ciclo percorre o ficheiro até EOF ??

Boa explicação btw

O ciclo é percorrido até a função fgets retornar NULL ao invés de EOF. Assim que não exista mais nenhuma linha a ler no ficheiro é retornado NULL.

"If the stream is at end-of-file, the end-of-file indicator for the stream shall be set and fgets() shall return a null pointer. "

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora