Festgespeicherte Dateien wieder löschen



  • Moin und servus an alle, ich brauche wieder Hilfe! 🙂

    Angenommen man hat 5 Objekte (z. B. Adressen) in eine Datei gespeichert. Nun möchte man über das Programm, welches die Adressen logischerweise lesen kann, eine der Adressen IN der Datei wieder löschen. Wie bewerkstellige ich das? Da gibts doch bestimmt einen Befeh; weiß einer Rat? (was weiß ich, z. B.

    out << del(PLZ)
    

    😕 )

    Danke im Voraus, 👍

    Mr. B



  • Nein, sowas gibts nicht.



  • ja, und wie willste DANN die sachen aus der datei löschen?
    das MUSS es doch geben!



  • Mr. B schrieb:

    ja, und wie willste DANN die sachen aus der datei löschen?
    das MUSS es doch geben!

    Nö. In Dateien kannst du nur überschreiben.
    Wenn du einen Eintrag löschen willst, geht das am Einfachsten, in dem du die Datei in eine neue Datei kopierst und dabei einfach den zu löschenden Eintrag überspringst.



  • angenommen, ich überschreibe den eintrag mit leerzeichen, dann wird bei der abfrage immer noch n leerzeichen da stehen;
    wenn ich alles außer den zu löschenden eintrag in eine neue, andere datei schreibe, dann müsste ich doch theoretisch jedes mal im code den dateinamen ändern, oder nicht? (tut mir leid, ich bin noch sehr am anfang!)

    mr. b



  • angenommen, ich überschreibe den eintrag mit leerzeichen, dann wird bei der abfrage immer noch n leerzeichen da stehen;
    wenn ich alles außer den zu löschenden eintrag in eine andere datei schreibe, dann müsste ich doch theretisch jedes mal im code den dateinamen ändern, oder nicht? (tut mir leid, ich bin noch sehr am anfang!)

    mr. b



  • Hallo,
    wenn deine Dateien nicht so groß sind, kannst du den Inhalt der Datei auch einfach in den Speicher kopieren (z.B. in ein Vektor von Adressen), dort die gewünschten Aktionen durchführen (z.B. Adresse löschen) und dann alles wieder in die vorhandene Datei schreiben.

    Alternativ erzeugst du eine temporäre Datei mit dem neuen Inhalt, überschreibst die alte mit dieser und löschst dann die temporäre Datei.



  • stimmt, wäre auch keine schlechte idee... muss man sich aber wieder sehr anstrengen 😃 😉



  • naja, das sind max. 10 Zeilen Code

    Außerdem hat man (meist) bei einem Adressenproramm, wenn es nicht zu viele Adressen sind, alle Adressen sowieso im Speicher. Da kann man schneller draufzugreifen, besser manipulieren usw. Bei Programmende wird dann alles in die Datei gespeichert



  • guck mal, was ich gefunden hab:
    http://ls10-www.cs.uni-dortmund.de/~alfert/cpp/7
    Da steht, dass man die Daten DOCH löschen kann und zwar mit

    ios::trunc
    

    die überlegung für einen anfänger wie mich ist jetzt erstmal, wie ich das einbetten kann. aber ich denke, dass ich das auch alleine schaffen werde!



  • ios trunc löscht die datei nicht, ios trunc löscht nur den kompletten inhalt beim öffnen der datei.
    um das zu benutzen, müsstest zunächst alles auslesen, die datei schließen, mit ios::trunc als parameter wieder öffnen, und dann den inhalt reinschreiben.
    das ist viel komplexer, als alles ws dir bisher vorgeschlagen wurde^^
    aber mal so als tipp, falls du sehr oft sehr viel an der datei rumdoktern musst:
    speicher die dateien direkt wie in einer table mit nummern und einem bit das besagt, ob die entsprechende zeile gefüllt ist.
    dann geht das ganze gleich viel einfacher, weil du dann das ganze neu reinschreiben vergessen kannst.
    gelöscht wird dann einfach, indem du nach der zeile 10 suchst, dort den inhalt rauslöscht, und dann das bit auf gelöscht setzt.
    beim nächsten eintragen wird dann automatisch(bzw von dir programmiert) nach der nächsten freien zeile gesucht, und dort eingetragen.
    fertig.

    nachteil: deine datensätze müssen alle absolut gleich lang sein.
    Vorteil: kein overheat durch ständiges neuerstellen der Datei


Anmelden zum Antworten