Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Maicon Lucas Mares

C Excluir linhas específicas de um arquivo em C

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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


 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, Maicon Lucas Mares disse:

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

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

 

exemplo: 

 

li um arquivo que tem as seguinte linhas:

maca

banana

melancia

maracuja

 

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

while(....)

{

if (j==2)

continue;

//aqui voce cola a funcao de escrever no arquivo...

}

Resumindo:

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.

 

Se nao pegou a ideia, posso explicar melhor com voce nos dizendo o que realmente deseja.

Editado por cezarstark

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×