[C] Excluir linhas específicas de um arquivo em C - C/C#/C++ - Clube do Hardware
Excluir linhas específicas de um arquivo em C
C Excluir linhas específicas de um arquivo em C
Por Maicon Lucas Mares, 15 de junho em C/C#/C++
Maicon Lucas Mares 0
Olá, estou aprendendo sobre arquivo em C e gostaria de saber como faço para apagar partes específicas do meu arquivo txt sem apagar tudo. Pesquisei e a maioria das pessoas dizem que eu devo copiar tudo do arquivo original menos as linhas que não quero e jogar em um arquivo novo com o nome antigo e excluir o antigo, mas como faço isto? (expliquem de uma forma simples por favor).
Existem muitas formas de abordar esse problema, tudo depende do contexto. Se por exemplo seu arquivo é pequeno e não contem um grande custo no que a processamento se refere, então é melhor você carregar ele na memória completo e editar, por outro lado se são milhares de registros a tratar então seria melhor "zerar" os dados dessa linha para marcar ela como "disponível" para um possível futuro registro, ao inserir um novo dado, esse deveria ocupar esse espaço que foi desocupado.
Pense em um arquivo como se fosse um estacionamento, lá você pode retirar carros, mas não quer dizer que eliminar um carro você vai eliminar a vaga, se retirar um carro a vaga permanece la para um novo carro ocupar. Deu para entender? Então seguindo esse raciocínio você pode seguir ao menos 2 ou mais estratégias; eliminar o dado e habilitar o espaço para que ocupe um novo dado ou "tirar todos os carros do estacionamento e enviar a outro estacionamento excetuando o veiculo desejado" que é a estratégia que outros programadores lhe propõem. A segunda é mais fácil pois você carrega tudo na memória trata os dados e envia os dados para um novo arquivo.
Para lhe dar exemplos fica difícil pois seria possível lhe passar um montão de código e talvez você não entenda, o melhor seria você buscar um bom tutorial sobre arquivos em internet.
Se optar por carregar tudo na memória você pode ler uma linha do arquivo, comparar com o dado que você deseja buscar e se não bater você envia essa linha para um vetor, caso coincida a busca você salta para a proxima linha, ou seja, não faz nada. O esquema seria mais ou menos esse:
pedir nome // scanf
repetir(até o fim do arquivo)//while
-ler uma linha //fscanf
-não coincide com nome?//if
-enviar para vetor.
coincide?//else
-não fazer nada.
fim repetir//fim do while
cezarstark 6
14 horas atrás, Maicon Lucas Mares disse:
Bom, voce pode copiar o conteudo do seu arquivo, gerar um arquivo novo e escrever nele tudo o que tinha antes, menos o que voce quer excluir.
mas para dizermos o que realmente pode ser feito voce deve nos dizer exatamente o que quer...
li um arquivo que tem as seguinte linhas:
ao copiar esse arquivo para uma matriz e por exemplo eu quero excluir a palavra melancia, então voce deve criar uma estrutura de repetidão e quando chegar na iteração que deseja você pula.
no exemplo acima melancia está na posicao 2 e usarei j como iteracao..
//aqui voce cola a funcao de escrever no arquivo...
Copia tudo para uma matriz;
criar novo arquivo zerado "w"..
com estrutura de repeticao escreve no arquivo tudo novamente, exceto a linha que nao deseja, e para isso usa um continue; dentro do if se a iteracao for igual a linha que nao deseja.