Eintrag aus txt datei löschen



  • Hallo Leute

    Habe ein kleines Problem.. schreibe gerade ein programm was weigth watcher points berechnet und diese sollen dann mit namen des produkts in einer txt datei gespeichert werden. so weit so gut klappt auch alles nun soll man aber auch einträge wieder aus der txt datei suchen und löschen können und da harperts bei mir.. die txt datei is folgendermaßen aufgebaut:
    produktname1
    pointanzahl1
    produktname2
    pointanzahl2
    produktname3
    pointanzahl3
    usw

    muss ich nu erst den ganzen inhalt der txt in zb ein array laden da dann suchen lassen per strcmp und dann löschen bzw nach dem laden die txt löschen/mit leerzeichen zuballern und dann alles wieder reinschreiben bis auf den einen wert der gelöscht werden soll?? das is doch viel zu umstädnlich gibt es irgend eine lösung mit der ich in der datei direkt nach dem produktnamen suchen kann? und dann einfach diesen löschen? und wenn das so ist wie erreiche ich dann das die daten die in der txt unter den gelöschten eintrag nach oben rücken??

    will keinen fertigen code nur n denkanstoß und vllt n befehl mit dem man das bewerkstelligen kann

    danke schon mal im vorraus

    lg coR



  • Du kannst nicht ohne weiteres was in einer datei löschen.

    Du legst eine Neue (temporäre) Datei an bspw. Tmp.txt.

    Dann liest du Zeile für zeile deine Text datei ein, und schreibt nur die selektierten Zeilen welche du willst in die Tmp Datei.

    danach löscht du deine Datei, und benennst die Tmp datei um 👍



  • er könnte aber auch den Text einlesen, das bearbeiten was er möchte, und danach die alte Datei einfach mit einem ios::trunc öffnen und seinen vorher eingelesenen und bearbeiteten Text wieder zurück schreiben ;)Oder?:D



  • Danke für den Tipp Boris.

    Werde das gleich mal so machen. Ist aber schon umstädnlich finde ich... aber kann man wohl nichts machen. Dennoch 1000 Dank



  • coR schrieb:

    Ist aber schon umstädnlich finde ich... aber kann man wohl nichts machen.

    ist eigentlich gar nicht umständlich, wenn man remove_copy_if richtig einsetzt und boost benutzt :

    #include <algorithm>
    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <string>
    #include <boost/bind.hpp>
    
    class Produkt {
        // IO-Streaming-operatoren
    };
    
    int main()
    {
        using namespace std;
        ifstream inFile("input.txt");
        ofstream outFile("output.txt");
        remove_copy_if( istream_iterator< Produkt >( inFile ),
            istream_iterator< Produkt >(), ostream_iterator< Produkt >( outFile ),
            boost::bind( &Produkt::Name, _1 ) == "produktname2" );
        return 0;
    }
    

    Gruß
    Werner


Log in to reply