Ir para conteúdo
Fórum Script Brasil
  • 0

Duvidas Em C++


edu.

Pergunta

eu vou insistir e fazer novamente uma pergunta que já fiz aqui...

não é possivel que ninguém saiba como resolver

aqui vai :

eu tenho um arquivo .txt com algumas informações dentro, como login, senha para fazer tipo um login dentro do programa

dentro do arquivo tem um numero double, e durante o programa, quero escrever um outro numero em cima do double que já estava la

porem quando eu vou escrever em cima do outro numero, ele não escreve nada, e deixa o numero antigo como estava...

e o problema é só quando já há outro numero na linha que ele vai escrever, quando está vazio ele escreve normalmente...

no arquivo.txt

login

senha

1000

login2

senha2

1020

ele procura pelo login2, e vai até a linha do numero 1020, e quero substituir por 1025 por exemplo, porem ele não faz nada...

quando vou escrever uso o comando arquivo << numero , sendo numero = 1025

alguém sabe como resolver?

quem quiser ver o codigo fonte:

      double numero;
      string login;
      string temp_dados;


      fstream dados;
      dados.open("dados.txt");
      while (!dados.eof())
      {
            dados >> temp_login;
            if (temp_login == login)
            {
                dados >> temp_dados;
                dados >> temp_dados;
                dados << numero;
                
                dados.close();
                break;
            }
            
            dados >> temp_dados;
            dados >> temp_dados;

      }

agradeço a quem puder ajudar...

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

A forma mais fácil seria ler todo o arquivo para dentro de um vector, modificar o que você quer modificar e depois gravar tudo no arquivo outra vez. Claro que para arquivos muito grandes esse método é ridículo, mas no seu caso não vejo problemas.

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <iterator>

int main()
{
    std::string linha;
    std::ifstream dados;
    std::vector<std::string> linhas_do_arquivo;
    std::vector<std::string>::iterator it;
    
    dados.open("arquivo");
    
    if (dados)
        while (std::getline(dados, linha))
            linhas_do_arquivo.push_back(linha);
            
    dados.close();
            
    // substitui 1020 por 1025...
    for (it = linhas_do_arquivo.begin(); it != linhas_do_arquivo.end(); it++)
        if (*it == "1020")
            *it = "1025";
            
    // aqui eu estou mostrando na tela, você precisa gravar no arquivo outra vez
    for (it = linhas_do_arquivo.begin(); it != linhas_do_arquivo.end(); it++)
        std::cout << *it << std::endl;
}

Link para o comentário
Compartilhar em outros sites

  • 0

valeu cara, mas acabou ficando na mesma porque eu não sei como salvar direito no arquivo. eu fiz no final dados << *it , mas não grava mesmo assim, se voce puder me dar uma maozinha, agradeceria hehe

eu fiz com que a declaração inicial de dados seja fstream para que possa escrever, e coloquei o dados.close() no final

e claro, coloquei o dados << *it no seu ultimo for

acabou ficando assim:

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <iterator>

int main()
{
   std::string linha;
   std::fstream dados;
   std::vector<std::string> linhas_do_arquivo;
   std::vector<std::string>::iterator it;
   
   dados.open("arquivo.txt");
   
   if (dados)
       while (std::getline(dados, linha))
           linhas_do_arquivo.push_back(linha);
           
           
   // substitui 1020 por 1025...
   for (it = linhas_do_arquivo.begin(); it != linhas_do_arquivo.end(); it++)
       if (*it == "1020")
           *it = "1025";
           
   // aqui eu estou mostrando na tela, você precisa gravar no arquivo outra vez
   for (it = linhas_do_arquivo.begin(); it != linhas_do_arquivo.end(); it++)
       dados << *it;
       
   dados.close();
   
}

Link para o comentário
Compartilhar em outros sites

  • 0
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <iterator>

int main()
{
  std::string linha;
  std::fstream dados;
  std::vector<std::string> linhas_do_arquivo;
  std::vector<std::string>::iterator it;

  // arquivo aberto para leitura
  dados.open("arquivo.txt");

  if (dados) {
      while (std::getline(dados, linha))
          linhas_do_arquivo.push_back(linha);
      
      // já lemos o arquivo e podemos fechá-lo        
      dados.close();
  }
  
  else {
      printf("erro lendo\n");
      return 0;
  }        
         
  // substitui 1020 por 1025...
  for (it = linhas_do_arquivo.begin(); it != linhas_do_arquivo.end(); it++)
      if (*it == "1020")
          *it = "1025";
  
  // abre o arquivo para escrita (vai escrever por cima do arquivo)
  dados.open("arquivo.txt", std::ios::out);
         
  if (dados) {
      for (it = linhas_do_arquivo.begin(); it != linhas_do_arquivo.end(); it++)
          dados << *it << std::endl;
      
      // fecha o arquivo que foi aberto para escrita
      dados.close();
  }
  
  else {
      printf("erro escrevendo\n");
      return 0;
  }
}

Link para o comentário
Compartilhar em outros sites

  • 0

opa, estava fora por um tempo, eu vi o codigo klaus, porem ainda não esta funcionando, não sei porque

ele simplesmente pega o arquivo e apaga tudo o que estava escrito...

estou usando um arquivo txt com o nome de arquivo.txt, com as seguintes informações dentro:

login

senha

1000

login2

senha2

1020

pelo que eu li no codigo, era para estar substituindo o 1020, porem só estou achando esquisito a parte em que ele esta pegando a informação do arquivo...

while (std::getline(dados, linha))

linhas_do_arquivo.push_back(linha);

o que isso está exatamente fazendo?

bom, não sei, agradeço se me der uma maozinha, porque só preciso disso para acabar um programa aqui, hehe valeu a ajuda que você esta me dando smile.gif

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...