Jump to content

[C] Manipulação de ficheiros - I


Hipnoted

Recommended Posts

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]

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

Até gosto de C os apontadores é que estragam tudo 😄 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..  👍

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other 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 👍

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

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

  • 8 months later...
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

Link to comment
Share on other sites

  • 7 months later...
  • 4 months later...
  • 1 year later...

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

Link to comment
Share on other 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.

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

  • 5 months later...

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. "

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.