Ir ao conteúdo
  • Cadastre-se

C Como inserir um caractere espaço em uma determinada posição de um arquivo .txt


Posts recomendados

Galera, preciso de uma ajuda com um algoritmo que estou desenvolvendo, inclusive abri outro tópico há uns dias atrás a respeito de outras dúvidas que surgiram sobre ele e o pessoal me ajudou bastante. Bom, é o seguinte: eu preciso inserir um caractere de espaço em um arquivo1 de entrada, porém todas as minhas tentativas de inserir esse espaço me resultaram na perca de 1 caractere, pelo que eu entendi o que está acontecendo é que o ao invés desse caractere ser adicionado/incrementado na posição desejada ele está substituindo o caractere já existente na posição por esse espaço. Nas minhas tentativas falha eu tentei direcionar o cursor até a posição desejada usando fseek( ) e em seguida imprimindo o espaço com fputc( ), também tentei deslocar o conteúdo do texto em uma posição posterior, mas dessa forma estou perdendo conteúdo no final do texto 😞
 

Segue uma imagem do meu "arquivo1" com a indicação da posição que eu desejaria inserir esse espaço(já existe um espaço nessa posição e eu gostaria de acrescentar mais um).  Além disso, se possível, eu também gostaria de saber como eu faria para remover esse espaço que foi inserido.

image.png.ca68a0bc57c248a1c8eea497254acb43.png

image.png.9540a2d7aaf526a1972c48182c6077f2.png

#include <stdio.h>
#include <string.h>

int main() {
   FILE *arquivo1;
	arquivo1 = fopen("arquivo1.txt","r+");
    fseek(arquivo1,-55,SEEK_END);
    fputc(' ',arquivo1); // inserindo espaço na posição desejada
    
	
	fclose(arquivo1);
	
    return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@André T Franco  os caracteres estão armazenados na memória , e ao inserir um valor qualquer em uma determinada posição  , o dado que estiver ali será substituído pelo outro , que foi inserido , pois o sistema não tem nenhuma função que dê um jeitinho de reagrupar os caracteres na memória puxando eles mais para o final do arquivo , e então um modo pode ser criar um arquivo auxiliar

FILE*   aux = fopen( "auxiliar.txt" , "w" ) ;

e ir armazenando os dados do arquivo1 nele até precisar inserir esse "espaço"  aí então insira o espaço e volte a preencher o arquivo auxiliar com os dados do arquivo1 e indo assim até o final do arquivo1 , e então delete o arquivo1 com o comando 

remove("arquivo1.txt");

e em seguida renomeie o arquivo auxiliar com o mesmo nome do seu arquivo1

rename("auxiliar.txt","arquivo1.txt");

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Felipecfk ? Não, não é 40.0x20 ou 32 em decimal é o espaço. 0x40 é '@'

 

22 horas atrás, André T Franco disse:

Segue uma imagem do meu "arquivo1" com a indicação da posição que eu desejaria inserir esse espaço(já existe um espaço nessa posição e eu gostaria de acrescentar mais um).  Além disso, se possível, eu também gostaria de saber como eu faria para remover esse espaço que foi inserido.

 

Já te perguntei isso e não respondeu. O que é uma "imagem de arquivo" ??? Quer mudar esse texto aí que mostrou ou isso aí é um DUMP do arquivo original?

 

De todo modo não é nada comum mudar direto no arquivo. Pode abrir como entrada e saída sim, modo "r+" e regravar o que quer. Ao gravar deve efetivar as alterações antes de ler de novo. Essa é uma das razões de chamar fflush, e não aquela bobagem comum de "limpar" o buffer, já que fflush sequer está definida para entrada.

 

Mas o comum é gerar outro arquivo para ter algum nível de segurança, e trabalhar com partes do arquivo na memória.

 

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

Perdão meus nobres, passei uns dias sem acesso ao fórum, desde já agradeço bastante por todas as dicas e ensinamentos repassados. Irei tentar aqui como você recomendou @devair1010. Também farei a tentativa recomendada @Felipecfk. Peço desculpas por inserir apenas a imagem @arfneto , sim, eu queria alterar o texto do arquivo .txt  original. Pois esse arquivo vai ser apenas para leitura em outra etapa do meu algoritmo, porém, para ser lido da forma desejada esse espaço faz toda a diferença.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@André T Franco 🙂 eu demoro para entender. Ainda não ficou claro para mim se o que quer alterar é esse arquivo texto que está mostrando, ou o arquivo original que esse troço representa. Afinal como está são 3 caracteres para cada byte de algo que já existia com 1 só. " 40" é a mesma coisa que @ por exemplo.

 

De todo modo a maneira comum de fazer isso é escrever um editor, online ou via arquivo, e usar um flltro. Por exemplo um arquivo assim 

 

@c000 + 8 32
@c000 - 12 
@c000 + 0 + 40

 

podia ser tratado como:

  • mudar o valor para o oitavo byte depois de @c000 para 0x32
  • apagar o que estiver 12 byes depois de @c00
  • inserir
  • 0x40 a partir de @c000

E o programa x seria usado assim: x entrada,txt comandos.txt saida.txt 

e se o cara usasse só dois parâmetros criaria o arquivo de saída com o mesmo nome.

Não poste uma imagem de um texto... Não ajuda nada. Poste o texto numa caixa de texto. Assim alguém que quiser ajudar terá mais facilidade em copiar TEXTO e seguir adiante. Uma imagem de pouco serve e talvez seja pedir muito que alguém crie um arquivo para depois testar o seu problema sem o seu programa. Ou com essas 10 linhas de programa que postou.

 

@FFC2
AA BB CC DD AA BB CC DD AA BB CC DD AA BB CC DD 
AA BB CC DD AA BB CC DD AA BB CC DD AA BB CC DD 
AA BB CC DD AA BB CC DD AA BB CC DD AA BB CC DD 
AA BB CC DD AA BB CC DD AA BB CC DD AA BB CC DD 
AA BB CC DD AA BB CC DD AA BB CC DD AA BB CC DD 
AA BB CC DD AA BB CC DD AA BB CC DD AA BB CC DD 

 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@arfneto Eu queria alterar o arquivo original mesmo ( o arquivo1.txt ), eu não sabia que era possível fazer isso que você me ensinou kkkk, mas obrigado mesmo, e mais uma vez peço desculpas por postar a "imagem" ao invés do texto ou o arquivo diretamente kkkk. Só tenho a agradecer, consegui resolver o problema graças aos ensinamentos de todos vocês.

Esses seriam os arquivos referentes aos problemas que postei, mas como mencionei consegui resolvê-los graças a ajuda de vocês. 

arquivo1.txt arquivo2.txt

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!