Letzte Zeile in einer Textdatei löschen
-
Morgen wie kann man die letze Zeile in einer Text Datei löschen ?
Meine Datei:
123
321
abc
defDas def soll gelöscht werden
#include <iostream> #include <fstream> using namespace std; int main(int argc, char* argv[]) { ofstream file("test.txt",ios::app); for (int i=0;i<4;i++) { if (i==3) { file<<"A"; } } system("PAUSE"); }So hab ich es probiert aber das klappt nicht in der Datei steht dann:
123
321
abc
defAHat wer eine Idee ?
-
cppcpp schrieb:
So hab ich es probiert aber das klappt nicht
Du löschst da ja auch nichts..
-
Das was du da machst, ist einfach nur das "A" an das Ende der Datei anzufügen.
Hab zwar nicht so viel Ahnung vom löschen innerhalb einer Textdatei. Aber überschreiben würde dich doch da nicht weiterbringen.Dann hättest du doch nur statt dem "def" ein "A" da stehen.
-
1.Textdatei einlesen
2.Alle Daten in einen STL-Container packen, bevorzugt std::vectorstd::string
3.In dem Container die Strings durchsuchen und mit deinem Suchmuster "def" abgleichen
4.Wenn Ergebnis matched, diesen string rauslöschen.
5.Ergebnis wieder zurück in die Datei schreiben.
-
Mit Container kenn ich mich leider noch nicht aus aber ich hab hier was gefunden dazu.
http://www.cpp-tutor.de/cpp/le13/le13_04.htm
Ich probiers einfach mal^^
-
Jop dann wird es Zeit das du dich damit auseiander setzt Container spielen in C++ nämlich eine tragende Rolle.
Als weitere Hilfe und Referenz bezüglich den Container,hier ein Link:
http://www.cplusplus.com/reference/stl/einmal links in der Liste geschaut, da findest du alle Container, mit beispielen beschrieben.
-
Firefighter schrieb:
bevorzugt std::vectorstd::string
Wieso denn das
std::queue ist da doch deutlich besser geeignet, die ist doch gerade für FIFO-verarbeitung gedacht.
-
FIFO?Uhi falsch gelesen, hatte nicht gesehen das er es so haben will, dann natürlich std::queue.Danke pumuckl
-
Firefighter schrieb:
FIFO?Uhi falsch gelesen, hatte nicht gesehen das er es so haben will, dann natürlich std::queue.Danke pumuckl
Naja, Datei rein in den Speicher, den Inhalt bearbeiten und wieder raus in die Datei ist doch immer FIFO, egal was man genau bearbeitet. Selbst wenn man die gesamte Datei gleichzeitig im Speicher halten will ist die queue bzw. deque günstiger als der vector weil nicht der ganze Krempel ständig rumkopiert werden muss um alles am Stück zu halten.
-
Hey.
Du kannst auch, um Speicher zu sparen, folgendes tun:
1. Datei öffnen
2. Zeiger an's ende der Datei setzen
3. Rückwärts lesen bis du auf ein '\n' stößt, wenn ja 4a, ansonsten 4b
4a. Anzahl der gelesenen Bytes mit 0-len überschreiben
4b. Alles löschen -> Keine Zeile gefunden
-
~feraL schrieb:
4a. Anzahl der gelesenen Bytes mit 0-len überschreiben
4b. Alles löschen -> Keine Zeile gefundenEr will die Zeile löschen, nicht mit Nullen überschreiben.