Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

UnDeRGoD

Remover texto de um ficheiro

Mensagens Recomendadas

UnDeRGoD    0
UnDeRGoD

Boas pessoal, pelo que sei nao é possivel remover uma linha com um determinado texto em C. Mas é possivel substituir o conteudo da linha por um "" ne? Alguem me dá um exemplo de como ficaria o code? Obrigado desde ja!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

À primeira vista, apagar um ficheiro, é tão simples quanto isto:

#include <stdio.h>

int main()
{
  FILE* f=fopen("file.txt", "w");

  fclose(f);

  return 0;
}

Se for só para uma linha (no meio de outras), o máximo que podes fazer é substituí-la por espaços. Caso contrário terás que rescrever o ficheiro todo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
UnDeRGoD    0
UnDeRGoD

À primeira vista, apagar um ficheiro, é tão simples quanto isto:

#include <stdio.h>

int main()
{
  FILE* f=fopen("file.txt", "w");

  fclose(f);

  return 0;
}

Se for só para uma linha (no meio de outras), o máximo que podes fazer é substituí-la por espaços. Caso contrário terás que rescrever o ficheiro todo.

Pois esse ultimo caso é que era util para mim, porque eu nao sei em que posicao está o texto. varia o texto, varia a posicao :x

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mellony    0
mellony

Eu já li isso, mas nao sabia que para aceder à linha 23 tinha que ler as anteriores, bem assim acho que já devo conseguir fazer isso. Obrigado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

Citando um tópico antigo

Os ficheiros de texto são sequênciais, isto significa que não podes ler directamente a linha N.

Por isso, para leres a 2ª linha tens de ler a primeira linha (e ignorar o que lês) e ler outra vez do ficheiro.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
fnds    2
fnds

Não é obrigatório ler as primeiras linhas todas, isso é feito para descobrir onde se encontra a linha que queremos, se souberes onde ela está podes a lêr logo.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mellony    0
mellony

Vejam lá se assim dáva para ver a linha 23 :wallbash:

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

main()
{
    
    FILE *fp1;
    int contador=0;
    char linha[200];
    fp1 = fopen("ficheiro1.txt","r");
   
   while(fgets(linha,200,fp1))
    {
        contador++;
        if(contador == 23)
        {
              printf(linha,fp1);
        }
    }


    fclose(fp1);
    
}

perguicite aguda...vou experimentar :thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mellony    0
mellony

Assim é que está perfeito...já tem o system pause.. :thumbsup:

E funciona!

Não custava lá muito dizer logo que era assim, mas pronto tambem não me custou muito fazer, obrigado na mesma.

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

main()
{
    
    FILE *fp1;
    int contador=0;
    char linha[200];
    fp1 = fopen("ficheiro1.txt","r");
   
   while(fgets(linha,200,fp1))
    {
        contador++;
        if(contador == 23)
        {
              printf(linha,fp1);
        }
    }


    fclose(fp1);
    system("pause");  
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

Não custava lá muito dizer logo que era assim, mas pronto tambem não me custou muito fazer, obrigado na mesma.

Na minha opinião, só assim é que se aprende verdadeiramente.

Quanto ao "system pause", eu prefiro não usar e executar na linha de comandos.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mellony    0
mellony

ok.

Relativamente ao codigo que meti aí...será que me podes dizer como faço, para que ele leia o texto, mas em vez de o escrever no ecrã, queria que o guardasse numa variavel, para depois poder fazer o que quiser com o texto.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

Tens de guardar num array de strings de C, ou seja, uma matriz de chars.

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

main()
{

    FILE *fp1;
    int contador=0;
    char texto[1000][200];
    fp1 = fopen("ficheiro1.txt","r");

   while( fgets( texto[contador] , 200 , fp1 ) )
    {
        contador++;
        if(contador == 23)
        {
              printf( "%s\n" , texto[contador] ); // so' agora reparei como escreveste o printf, de certeza que funcionava??
        }
    }


    fclose(fp1);

}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Marfig    0
Marfig

Em relação a system() existem dois problemas essenciais com esta função, pelo que deve ser evitada.

- Tal como o mogers disse, não funciona em linux, porque a função system() vai enviar um comando ao caller do teu programa. O linux não reconhece o comando "pause". Por outro lado se o caller for uma outra aplicação, mesmo em windows, essa aplicação poderá não saber o que fazer com o comando "pause".

- É uma função insegura na medida em que se eu colocar no mesmo directório do teu programa - ou num dos directórios da variável de ambiente Path do teu computador - um ficheiro chamado pause.exe que formata o teu disco, quando esse comando executar, vai chamar o meu pause.exe e ... bom, não vai ser bonito :P

Poderão haver razões para usar system(). Mas nunca existe uma razão para usar system("pause") quando se pretende que o programa aguarde pelo utilizador para terminar. Como o mogers disse, a melhor solução é correres o programa da linha de comandos. Quando estou a programar para a linha de comandos em Windows (o que por acaso até tenho feito muito ultimamente) tenho sempre uma janela cmd aberta (por acaso até nem é o cmd. Eu uso o TakeCommand. Mas é a mesma coisa).

Mas se realmente preferes dessa maneira, então tens uma melhor alternativa.

getchar() em vez de system("pause").

Escreves menos e nem precisas de um #include <stdlib.h> se não precisares dela como precisas para o system("pause"), uma vez que se estás a programar para a linha de comandos, o mais certo é estares já a usar #include <stdio.h>

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
_deXter    0
_deXter

Mas se realmente preferes dessa maneira, então tens uma melhor alternativa.

getchar() em vez de system("pause").

Já agora, não será também aconselhável limpar o buffer antes de getchar()? Confesso que já estou um pouco esquecido de como fazer isso em C, mas penso que por via das dúvidas é mais seguro limpar o buffer antes. Certo?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
mogers    14
mogers

Já sabes o que é um array (unidimensional) de C?  E bidimensional (também chamado de matriz)?

Também precisas de saber como se tratam as strings em C (texto - com arrays de caracteres).

Neste contexto, o 1000 é o número de linhas e 200 o número de colunas. Isto é, 1000 strings com 200 carateres cada uma (no máximo).

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade