Ir ao conteúdo
  • Cadastre-se

Tirar letras de arquivo de texto


DAVIFN

Posts recomendados

Olá, eu quero saber um comando em C++ para retirar as 2 últimas letras de um arquivo de texto, deixando apenas as 8 primeiras (tem 10 letras), por exemplo, tendo um arquivo .txt assim:

ABCDEFGHIJ

Deixar apenas:

ANCDEFGH

Nota: Não quero apenas para letras, mas sim com qualquer número e símbolo e sinal de espaço etc, se tiver dez "@" no arquivo, que tire os 2 últimos, ou seja, o que quero é um comando pra tirar os 2 characteres finais.

Obrigado desde já.

Link para o comentário
Compartilhar em outros sites

Bom, não seria de um arquivo de texto mas de uma linha ou algo do tipo desse arquivo, né?

Se sim, armazene isso numa variável do tipo std::string, daí o use a função erase(). Por exemplo,


std::string A = "ABCDEFGHIJ";
std::cout << A.string::erase(8, 10);

O primeiro argumento da função, diz a posição inicial a ser apagada daí em diante, e o segundo, a posição final. Lembre-se de incluir no projeto a biblioteca <string>.

Link para o comentário
Compartilhar em outros sites

V!OLADO, acredito que este código passado por você seja para modificar strings, eu quero é apagar do arquivo mesmo, eu sei fazer isto assim:

Primeiro eu armazeno todo o conteúdo por meio de um fgetc, e quando chegar no 8º character, eu paro de armazenar. Depois, recrio o arquivo e "fprinto" no arquivo.

Mas, o que quero é não ter que recriar o arquivo, mas sim apagar diretamente do arquivo estes 2 characteres. Deve existir um comando que possibilite isto, na casa dos fopen, fseek, etc...

Aguardo respostas!

Link para o comentário
Compartilhar em outros sites

V!OLADO,

É imprescindível não esquecer o R, se não, eu saio no prejú. :D

acredito que este código passado por você seja para modificar strings, eu quero é apagar do arquivo mesmo, eu sei fazer isto assim:

Primeiro eu armazeno todo o conteúdo por meio de um fgetc, e quando chegar no 8º character, eu paro de armazenar. Depois, recrio o arquivo e "fprinto" no arquivo.

Mas, o que quero é não ter que recriar o arquivo, mas sim apagar diretamente do arquivo estes 2 characteres. Deve existir um comando que possibilite isto, na casa dos fopen, fseek, etc...

Aguardo respostas!

Entendo. De qualquer maneira se mudar de ideia, fica a dica.

Você conhece a função getline()? Ela armazena diretamente uma linha inteira do arquivo como string. De maneira que é bastante simples fazer o que você quer com getline() junto com erase().

Link para o comentário
Compartilhar em outros sites

Desculpe pelo prejuízo. Então, vou usar deste modo até achar a resposta, eu uso o fgetc com um while e uma variável para saber até qual ponto pegar, por exemplo:


int character;
while((armazenar=fgetc(arquivo))!=EOF)
{
if(character==8)break;
character++;
}

E aí, basta eu recriar o arquivo no modo "W" para "apagar" os 2 characteres depois do oitavo.

É isso, enquanto não conseguir a resposta dou meu jeito. Obrigado mesmo assim por sua resposta!

Link para o comentário
Compartilhar em outros sites

Mas, o que quero é não ter que recriar o arquivo, mas sim apagar diretamente do arquivo estes 2 characteres. Deve existir um comando que possibilite isto, na casa dos fopen, fseek, etc...

Dê uma lida no link abaixo e vai entender que, ainda que isso fosse possível, seria uma operação extremamente onerosa, sobretudo se o arquivo fosse muito grande.

http://stackoverflow.com/questions/1151713/delete-a-line-from-a-file-in-c-language

Trabalhe com arquivos temporários e seja feliz.

:natal:

[]'s

LNW

Link para o comentário
Compartilhar em outros sites

LNW, obrigado por sua resposta, utilizarei arquivos temporários nesta 1ª versão de meu programa.

A propósito, meu programa é um arquivo executável que abre uma planilha de texto, como o bloco de notas. O diferencial dele é que ele armazena os dados de texto dentro do próprio executável, e o reexibe na próxima inicialização. Ainda preciso colocar algumas opções de personalização nesta 1ª versão, mas já fiz a interface em API (janelas, botões...). Está ficando realmente muito legal, se alguém se interessar pelo código fonte ou pelo executável pode me adicionar no Facebook™, Davi Nonnenmacher.

Link para o comentário
Compartilhar em outros sites

Extremamente onorosa nada, já encontrei o que procurava! E nem foi tão difícil assim. LNW, o problema era que, se fosse apenas 2 chars que eu quisesse remover, eu poderia usar temps, mas necessito remover todo o conteúdo de um arquivo e deixar somente os não sei quantos MB iniciais, portanto, caso eu usasse temporários, demoraria muitos segundos, assim eu otimizo o processo e não demora quase nada :D. Obrigado à todos que responderam, segue abaixo o código para interessados:


// Aqui o que procurava, pessoal! Abaixo as explicações:
HANDLE hFile=CreateFile("teste.txt",GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_ALWAYS,0, 0); // Isso cria uma "HANDLE", você só deve trocar o "teste.txt" para uma char* com o nome do seu arquivo.
SetFilePointer(hFile,2,0,FILE_BEGIN); // Mude o "2" para o número de novos characteres que você quer que seu arquivo tenha, se você quiser tirar alguns, vai ter que usar um comando para conseguir ver a quantidade de bytes que seu arquivo tem e subtrair da quantidade o número que quer tirar, mas isto é fácil...
SetEndOfFile(hFile); // Aqui é a função que tira os bytes do arquivo até o número especificado acima, no caso, ele deixará o arquivo teste.txt apenas com 2 bytes.
CloseHandle(hFile); // Encerra a HANDLE, como um fclose

//"Taí" o código pra quem precisar.

É só usar fseek e ftell se quiser remover uma quantidade específica de chars (fseek e ftell me da a quantidade de bytes do arquivo, basta eu subtrair N para remover estes N, e usar o valor no lugar do 2...)

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!