Apagar linha em arquivo

1. Apagar linha em arquivo

Frederico Oliveira de Paula
jucolino

(usa Debian)

Enviado em 16/02/2006 - 21:29h

como que eu faço para apagar uma linha de um arquivo texto em c. Por exemplo:

linha1.........
linha2.........
linha3.........
linha4.........

depois de apagar uma linha

linha1.........
linha2.........

linha4.........

sendo que o arquivo é de texto puro


  


2. Sua resolução

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 05/03/2006 - 17:36h

Aí esta o programa que você quer (espero que seja mesmo... :) )

/*********************************************************************************************
Programa: apaga.c
Autor: Enzo Ferber 'Slackware_10'
Propósito: Apaga linha definida por usuário em um arquivo
**********************************************************************************************/

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

#define NULO '\ 0' //tire o espaço entre a '\' e o '0'.. coloquei o espaço pois tá dando erro aqui no VOL

int abreArquivo(char arquivo[]){
FILE *arqEntrada;
FILE *arqSaida;
int line = 0;
int linha = 1;
int i;
char textoArquivo[100];
if((arqEntrada = fopen(arquivo, "r")) == 0){ //testa se o arquivo pode ser aberto
printf("Impossivel abrir arquivo...\n"); //informa o erro
exit(1); //finaliza execução
}
if((arqSaida = fopen("encoded.txt", "w")) == 0){ //testa se o arquivo pode ser aberto
printf("Impossivel abrir arquivo...\n"); //informa o erro
exit(1); //finaliza execução
}
printf("Digite a linha a ser apagada no arquivo: "); //pede a linha
scanf("%d", &line); //le a linha e armazena na variável 'line'
rewind(arqEntrada); //certifica de que o cursor esta no primeiro caractere do arquivo
for(i = 0; !feof(arqEntrada);i++){ //incrementa 'i' enquando não for fim de arquivo
memset(textoArquivo, NULO, 100); //inicializa e/ou limpa string 'textoArquivo'
fgets(textoArquivo, 101, arqEntrada); //pega uma string de 100 caracteres
if(linha == line){ //se a linha for a escolhida
fputc('\n', arqSaida); //troca a linha que o usuario quer por nova linha
linha = linha + 1; //incrementa o contador de linhas
continue; //volta ao inicio do loop sem executar o resto
}
linha = linha + 1; //incrementa o contador de linas
fputs(textoArquivo, arqSaida); //coloca a string 'textoArquivo' no arquivo encoded.txt
}
printf("Linhas: %d\n", (linha-1)); //imprime quantas linhas tem o arquivo lido
fclose(arqEntrada); //fecha a stream 'arqEntrada'
fclose(arqSaida); //fecha a stream 'arqSaida'
}

int main(void){ //rotina principal do programa
abreArquivo("arquivo.txt"); //ponha o nome do arquivo a ser editado aqui
}





3. Link para meu script

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 06/03/2006 - 17:46h

http://www.vivaolinux.com.br/scripts/verScript.php?codigo=1766

Se o de cima não funionar... tenta baixar ele mesmo... :)

Espero ter ajudado... te mais


4. Apagar caracter

Klérisson Paixão
klerisson

(usa Debian)

Enviado em 11/12/2006 - 22:59h

Como faço para apagar caracteres em um arquivo? Exemplo:

"Linux"

Depois da primeira iteração:

"Linu"

E assim por diante.
Obrigado.


5. Re: Apagar linha em arquivo

Gabriel Camargos
arcanjo_mg

(usa Debian)

Enviado em 12/12/2006 - 10:53h

leia caracter a caracter do arquivo de entrada dentro de um while ate fim de arquivo por exemplo, se o caracter for o que deseja apagar vc nao grava no arquivo de saida, se nao for vc grava, por fim, quando lido todo o arquivo voce pode apagar o original e renomear o arquivo de saida para o nome do que era leitura.


6. renomear arquivo

Hiran Nonato Ferreira
hirannonato

(usa RedHat)

Enviado em 14/03/2007 - 13:59h

gostaria de saber se tem como renomear um arquivo do tipo txt com um programa em c


7. Re: Apagar linha em arquivo

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 14/03/2007 - 16:11h

#include <stdio.h>

int rename(const char *old, const char *new);


8. Re: Apagar linha em arquivo

Rafael
RafaelSousa

(usa Slackware)

Enviado em 25/04/2007 - 09:10h

Aqui está o código que fiz a um tempinho para windows.

No Windows, o Enter em arquivos é \xd\xa, no linux é só alterar isso.

o código:

----------------------------------------------------

#include <stdio.h>

int main(int argc, char *argv[]){
if (argc<3){
printf("Uso: %s [arquivo 1] [arquivo 2] [linha]\n\n",argv[0]);
printf("Onde\n\n");
printf("arquivo 1 eh o arquivo fonte\n");
printf("arquivo 2 eh o resultado\n");
printf("linha eh o numero da linha que voce quer apagar\n");
return(0);
}
FILE *fp, *fp1;
char c;
int i, j, y;
fp=fopen(argv[1],"rb");
fp1=fopen(argv[2],"wb");
i=0;
y=0;
j=atoi(argv[3]);
while ((c=fgetc(fp))!= EOF){
if (c=='\xd') i++;
if (j-1!=i){
fputc(c,fp1);
}
else{
if (y>0);
else{
fputs("\xd\xa",fp1);
y++;
}
}
}
fclose(fp);
fclose(fp1);
printf("Terminado!\n");
return(0);
}

-----------------------------------------------

Abraços






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts