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

UnDeRGoD

Remover texto de um ficheiro

35 mensagens neste tópico

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

À 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qual é o codigo fonte para substituir o texto de uma determinada linha por espaços?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

digam-me so como selecionar por exemplo a linha 23...como é que seleciono a linho onde pretendo realizar a acçoes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se souberes em que byte é que ela começa. Mas isso só acontece em casos muito particulares e não parece ser o caso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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");  
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

É esse o espírito :thumbsup:
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é bem o facto de ser mau, mas prefiro testar na consola. Creio que não funciona em linux.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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);

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim funcionava, escrevia a linha 23 no ecrã. Obrigado pelo teu codigo, vou explorar isso melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes me explicar esta linha? :-[

char texto[1000][200];

Principalmente para que serve o 1000 e o 200 :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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