Manipulação de TXT

1. Manipulação de TXT

Erick Torres
ericktorres

(usa )

Enviado em 22/09/2015 - 13:41h

Boa tarde Pessoal,
Alguém pode me ajudar, como faço para apagar uma linha específica de um arquivo txt em C, levando em conta que esse arquivo já está criado e com conteúdo.

Att


  


2. Re: Manipulação de TXT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/09/2015 - 15:47h

A única maneira portável de se “apagar” uma linha de um arquivo texto é criar um arquivo novo, copiar as linhas qu interessa manter, e depois substituir o arquivo original com o novo.

No mundo Unix, você até pode apagar uma parte de um arquivo sem a necessidade de criar um novo, mas somente se a parte a ser apagada estiver no final do arquivo.


3. Re: Manipulação de TXT

Erick Torres
ericktorres

(usa )

Enviado em 23/09/2015 - 08:24h

Entendi .. mas alguem pode me explicar mais ou menos como eu faria isso?



4. Re: Manipulação de TXT

Wellington
wellington_r

(usa Debian)

Enviado em 23/09/2015 - 10:58h


Mas você nem passa as informações necessárias. Como espera que alguém te ajude?

Você quer apagar a linha especificada por número da linha, por palavra, por frase...?


5. Re: Manipulação de TXT

Roger Amaro Almeida
RogerAmaro

(usa Linux Mint)

Enviado em 23/09/2015 - 19:46h

usa o find e o erase das strings
exemplo:
int main ()
{
ifstream tab;
string s,cabecalho;
char N;

tab.open("Tabela.txt", ios::in);

if (!tab.is_open())
{
cout << "Arquivo nao encontrado, erro fatal!";
exit(1);
}




while (tab.good()){

getline(tab, s);
s.erase(0,29);
N=s.find(':');
s.erase(0,N+6);
cout << s << endl;



}




6. Re: Manipulação de TXT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/09/2015 - 01:03h

ericktorres escreveu:

Entendi .. mas alguem pode me explicar mais ou menos como eu faria isso?


Você copia coisas num programa do mesmo jeito como copiaria um texto de um livro para um caderno ou de um caderno para o outro: você lê o original, e escreve no que vai receber a cópia.

Aí eu pergunto: como você faria para suprimir um pedaço do texto ao copiar de um caderno para outro?

Do mesmo jeito você vai proceder num programa.


7. Re:

Erick Torres
ericktorres

(usa )

Enviado em 28/09/2015 - 14:37h

Desculpa pessoal se não expliquei corretamente. Estou começando agora a programar em C, tenho muitas duvidas.
Gostaria de uma dica de como apagar uma linha (PELO NUMERO) de um arquivo txt.
Por string também serve, porém como estou começando agora creio que seja algo mais avançado para eu entender.

Obrigado pela atenção !


8. Re: Manipulação de TXT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/09/2015 - 04:33h

Eu insisto com a analogia. Se você tem de copiar um texto de um caderno para o outro, mas deixando a 15ª de fora da cópia, como você faria?

Será que você não teria de contar as linhas?

Veja, então, que bom para você o fato de que o C tem funções que permitem ler linhas inteiras de uma vez!


9. Re:

Erick Torres
ericktorres

(usa )

Enviado em 29/09/2015 - 09:08h

Paulo obrigado pela atenção, até a parte de copiar o conteúdo de um arquivo para outro e no final renomear eu entendi, ficaria assim?


char leitor[1000];
while (fgets(leitor, 1000, projeto) != NULL)
fputs(leitor, copia);
system("mv copia.txt projeto.txt");
fclose(projeto);
fclose(copia);


Porém como eu faria para ignorar uma certa linha?



10. Re: Manipulação de TXT

JoãoLucas
__JoaoCorreia

(usa Ubuntu)

Enviado em 29/09/2015 - 16:19h

void removeLine(char *line){
FILE *file1; //Arquivo original
FILE *file2; //Novo arquivo
char *_line;

//Abra o arquivo original
file1 = fopen("file1","r+");

//Abra o arquivo novo
file2 = fopen("file2.txt","w+");

//Enquanto não chegar ao fim do arquivo
while(feof(file1) == 0){

//Leia uma linha
fscanf(users,"%s",_ line);

//Se a linha que você leu for diferente da que você quer excluir, a coloque no novo arquivo
if(strcmp(_line,line) != 0){
fputs(line,file2);
}
}

//Fecha os arquivos
fclose(file1);
fclose(file2);

//Apague o arquivo original
remove("files/file1.txt");
//E renomei o novo arquivo como o original
rename("file2txt","file1.txt");
}

Acho que tudo certo :D


11. Re: Manipulação de TXT

Paulo
paulo1205

(usa Ubuntu)

Enviado em 30/09/2015 - 09:16h

Se você pretende usar system() para chamar um comando externo para fazer tudo o que você quer, por que um programa em C? Chame logo o comando externo.

O Unix tem dezenas de utilitários para manipular texto já prontos. Reinventar um deles é um bom exercício didático de programação em C. Mas não há nada didático em fazer um programa “atravessador”, que gasta recursos do sistema para, no fim das contas, não fazer mais do chamar outro programa para realmente executar a tarefa.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts