TXT Datei durchsuchen und Leseposition setzen
-
JörgK schrieb:
Ich möchte, wenn das Array sich ändert natürlich auch die Datei ändern - altes SOLL da wegfallen

Fein, dann einfach Datei zum Lesen und zum Schreiben öffnen (ios::out | ios::in) und du kannst den Schreibzeiger munter an jede Stelle der Datei schieben.
Aber nur um das nochmal klar zu stellen, weil viele Anfänger das trotz mehrfacher Warnung nicht verstehen: Datei heißt einfach nur Bytefolge, nix Formatierung. Das heißt zum Beispiel, wenn in der Datei steht:
Name: Hans Straße: Musterstraßeund du änderst "Hans" durch überschreiben in "Johannes", dann wird in der Datei hinterher
Name: Johannesaße: Musterstraßestehen.
-
Hallo Sepp,
ich hab das gerade noch mal so ausprobiert mit dem ersetzen, wie du das gezeigt hast, aber irgendwie löscht der mir dabei immer die ganze Zeile.
Hier mal mein Code:template <class X> void dateischreiber (X datensatz, int zeigerPosition) { ofstream songstream ("Song.txt"); songstream.seekp (zeigerPosition, ios::beg); if (songstream.good()) { songstream << datensatz; } else { //Fehlermeldung einfügen } songstream.close(); }Lasse ich jetzt einen Char-Array mit 100 Stellen an position 0 schreiben, funktioniert das soweit erstmal. Lasse ich dann aber an Stelle 102 (oder höher) einen anderen Char-Array oder Int oder sonst was schreiben, ist nur noch der neue Text in der Datei und der alte verschwindet komplett.
Wo ist da mein Denkfehler?
Gruß
-
Wenn du einen ofstream öffnest, dann ist standardmäßig
ios::outder Openmode. Dies löscht eine vorher vorhandene Datei. Du musst daher, wie gesagt,ios::out | ios::inals Openmode nehmen.
-
SeppJ schrieb:
Dies löscht eine vorher vorhandene Datei.
Was? Du meinst std::ios::trunc. Seit wann löscht std::ios::out?
-
Hacker schrieb:
Was? Du meinst std::ios::trunc. Seit wann löscht std::ios::out?
Seit 1979. Oder da dieses Verhalten auf den Openmodes von C basiert eigentlich seit 1972. Und da diese wiederum auf B basieren...
-
SeppJ schrieb:
Wenn du einen ofstream öffnest, dann ist standardmäßig
ios::outder Openmode. Dies löscht eine vorher vorhandene Datei. Du musst daher, wie gesagt,ios::out | ios::inals Openmode nehmen.Vielen herzlichen Dank !
Daran hat's gelegen. Mein Buch hat diese vorgehensweise dummerweise mit folgenden Worten beschrieben:Wenn Sie beides tun wollen [Anm. gemeint ist schreiben und lesen], benutzen Sie fstream und setzen den mode auf in|out - und viel Glück dabei, es ist häufig einfacher eine Datei erst komplett zu schreiben [...] ,als alles gleichzeitig zu tun.
Naja. Nun weiß ich's ja. Vielen Dank nochmal

Gruß Jörg
-
JörgK schrieb:
Daran hat's gelegen. Mein Buch hat diese vorgehensweise dummerweise mit folgenden Worten beschrieben:
Wenn Sie beides tun wollen [Anm. gemeint ist schreiben und lesen], benutzen Sie fstream und setzen den mode auf in|out - und viel Glück dabei, es ist häufig einfacher eine Datei erst komplett zu schreiben [...] ,als alles gleichzeitig zu tun.
Hmm, dieser lockere Stil...Das Buch ist aber nicht von Jürgen Wolf, oder?
-
SeppJ schrieb:
Hmm, dieser lockere Stil...Das Buch ist aber nicht von Jürgen Wolf, oder?
Dieser Stil könnte vom Großadministrator höchstpersönlich sein, denn eine kurze Google-Recherche nach dem Zitat brachte C++ für Dummies zum Vorschein.
-
Hat der Großadministrator die deutsche Ausgabe geschrieben? War mir bisher gar nicht bekannt.
-
"Übersetzt von Bäckmann, Marcus": http://www.wiley-vch.de/publish/dt/books/ISBN3-527-70834-0/?sID=osovc85n13b2t8e3ep5kphqqg0
-
Na schau, da GRÖADAZ
