1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida - Remover linha num .txt em C++

Discussão em 'Programação' iniciada por faeuk, 23 de Maio de 2009. (Respostas: 1; Visualizações: 2476)

  1. faeuk

    faeuk Power Member

    Boa tarde

    Estou a fazer um programa de gestão de um armazém de roupa, e uma das funções básicas pretendidas são as inserir e remover produtos.
    Cada produto tem várias características e o utilizador, depois de escolher a opção devida no menu, deverá colocar as seguintes no input "Tipo Modelo Cor Tamanho Preço Stock" (estas na classe do artigo) e depois o programa gera um id (fora da classe) e grava-as num ficheiro .txt com o id e as características numa linha.
    A função inserir e colocar no ficheiro não tem problema, só que não estou a ver como hei-de fazer para que, lendo o id, apague a linha onde está esse artigo, uma vez que se encontra fora da classe. Estou a aprender c++ e não tenho grandes conhecimentos, já procurei e não consegui nenhuma solução.

    Em código tenho isto (parte)
    Código:
    //função de gerar o id
    int gerarid(){
        int i, a = (1000+rand()%9999);
        for(i = 0; i < ID.size(); i++){
            if (ID[i] == a) a = gerarid();
        }
            ID.push_back(a);
        return a;
    }
    //operador da classe artigo
    ostream& operator<< (ostream& out, Artigo &a ){
        out << a.getTipo() << "\t " << a.getModelo() << "\t " << a.getCor() << "\t " << a.getTamanho() << "\t\t" << a.getPreco() << "\t " << a.getStock() << endl;
    }
    
    //função de inserir e gravar novo artigo no txt
    void inserirartigo(){
        string cor, modelo, tipo;
        float preco;
        int stock, tamanho;
        cout << "Especifique: Tipo Modelo Cor Tamanho Preco Stock\n";
        cin >> tipo >> modelo >> cor >> tamanho >> preco >> stock;
        Artigo a1(tipo, modelo, cor, tamanho, preco, stock);
        ofstream novoartigo ("Artigos.txt", ios::app);
        if (novoartigo.is_open()){
            novoartigo << " " << gerarid() << "\t " << a1;
            novoartigo.close();
            cout << "Artigo adicionado com sucesso\n";
    }
    void removerartigo(){
        int id;
        string item;
        listarartigos();
        ofstream novoartigo ("Artigos.txt", ios::app);
        cout << "\nInserir ID do item a eliminar da lista\n";
        cin >> id;
        if (id == gerarid()){
        //dúvida a fazer esta parte}
    }
    
    
    Se alguém me pudesse ajudar a arranjar uma solução para isto, fazendo desta maneira ou encontrando uma melhor, fica desde já o meu agradecimento.
     
  2. porque n carregas o ficheiro para uma estrutura em memoria e fazes as eliminações que quiseres e depois voltas a guardar tudo no txt, ou outra solução é usares um txt de backup... isto é dizes o id que queres eliminar e depois vais copiando os dados para esse backup file linha a linha, e qd a linha que tiveres a copiar tiver o id igual ao que queres eliminar simplesmente n escreves nesse ficheiro. no fim de tudo fazes o rename desse ficheiro para o que tens oringinal. qualquer coisa mp
     

Partilhar esta Página