textdateien umschreiben
-
Hallo,
ich möchte eine Textdatei mit mehreren hunderten Zeilen umschreiben. Dies klappt auch alles wunderbar für eine Textzeile. Ich bekomme es aber nicht hin das Programm so zu gestalten, dass nachdem es eine Zeile umgeschrieben hat, in die nächste springt und dort weiter arbeitet. Dies müsste solange geschehen bis die letzte Zeile vom Ausgangstext umgeschrieben und in die neue Datei gespeichert wurde(auch zeilenweise).Bin für jede Hilfe dankbar

ifstream file("c:\\lese.txt");
fstream datei;
getline(file,zeile); // zeile aus textdatei wird eingelesen
file.close();i = zeile.length(); // zeile wird verarbeitet
i = i - 5;
zeile.erase(i,5);
zeile += ", 0, 0, 0),";datei.open("new_text.txt", ios::out); // verarbeitete zeile wird in eine neue datei geschrieben
datei << zeile << endl;
datei.close();
-
Wie wäre es mit einer Schleife?
-
In deinem Fall ist es wohl am besten wenn du die zu ändernde Datei zum lesen öffnest und eine neue Datei anlegst, in welche du schreibst. Dann liest du einfach immer eine Zeile ein und schreibst sie in die Ausgabedatei. Zum schluss löschst du die eingelesene Datei und benennst die neue Datei um.
std::string line; std::string neuerName=dateiname + "_temp"; std::ifstream i(dateiname.c_str()); std::ofstream o(neuerName.c_str()); //Fehlerüberprüfung für beide Streams while (!i.eof()) { std::getline(i, line); MachWasMitZeile(line); o << line << std::endl; } i.close(); o.close(); std::remove(dateiname.c_str()); // Funktionen in cstdlib enthalten std::rename(neuerName.c_str(), dateiname.c_str());
-
ich verstehe nicht wie du das mit dem "neuerName" und "Dateiname" meinst, bzw wie das funktioniert, habe dein script total vergewaltigt glaube ich
#include "stdafx.h" #include "iostream" #include "fstream" #include "string" using namespace std; int i; int main() { std::string line; std::string neuerName="new_text" + "_temp"; std::ifstream i("c:\\lese.txt"); std::ofstream o("new_text.txt"); //Fehlerüberprüfung für beide Streams while (!i.eof()) { std::getline(i, line); i = line.length(); i = i - 5; line.erase(i,5); line += ", 0, 0, 0),"; o << line << std::endl; } i.close(); o.close(); std::remove("c:\\lese.txt"); // Funktionen in cstdlib enthalten std::rename(neuerName.c_str(), dateiname.c_str()); return 0; }
-
Jop so in etwa
. Also Dateiname ist der Name der Datei, die du bearbeiten willst. Und neuerName ist der Name der temporären Datei.// #include "stdafx.h" MS Kram wenn du keine precompiled Headers benutzt brauchst du das nicht #include <iostream> // Muss in spitze Klammern #include <fstream> #include <string> // using namespace std; Da überall std:: davor steht brauchst du das nicht int i; int main() { std::string line; std::string dateiname="C:\\lese.txt"; std::string neuerName=dateiname + "_temp"; std::ifstream i(dateiname.c_str()); std::ofstream o(neuerName.c_str()); //Fehlerüberprüfung für beide Streams while (!i.eof()) { std::getline(i, line); i = line.length(); i = i - 5; line.erase(i,5); line += ", 0, 0, 0),"; o << line << std::endl; } i.close(); o.close(); std::remove(dateiname.c_str()); // Funktionen in cstdlib enthalten std::rename(neuerName.c_str(), dateiname.c_str()); return 0; }Ich hoffe nun ist alles klar.
-
Das ist echt nett, DANKE !!! Das Script gibt scheint zu funktionieren, compiler mault nicht rum, jedoch wird irgendwie nirgendswo die neue Datei erstellt, kann sie im Projekt oder auf Platte nirgends finden? bin ich zu blöd?
-
Die neue Datei ersetzt die alte, sodass es den von dir gewünschten Effekt ergibt. D.h. nach Ausführung des Codes sollte die neue Datei den Namen der alten tragen und die alte sollte gelöscht sein. Öffne einmal die Datei und sehe nach ob sich was geändert hat.
-
ne leider nicht

also ein Fehler den ich noch korigiert habe ist, das der Code
i = line.length(); i = i - 5; line.erase(i,5); line += ", 0, 0, 0),";mit der selben Variable arbeitet wie
while (!i.eof()) { std::getline(i, line);
-
Hast du es mit der veränderten Variante noch einmal probiert?
-
Ja also es sieht jetzt so aus:
#include "stdafx.h" #include <iostream> #include <fstream> #include <string> using namespace std; int i,t; int main() { std::string line; std::string dateiname="C:\\lese.txt"; std::string neuerName=dateiname + "_temp"; std::ifstream i(dateiname.c_str()); std::ofstream o(neuerName.c_str()); //Fehlerüberprüfung für beide Streams while (!i.eof()) { std::getline(i, line); t = line.length(); t = t - 5; line.erase(t,5); line += ", 0, 0, 0),"; o << line << std::endl; } i.close(); o.close(); std::remove(dateiname.c_str()); // Funktionen in cstdlib enthalten std::rename(neuerName.c_str(), dateiname.c_str()); cout << "Hallo" << endl; return 0; }Und der Text sieht so aus
(510, 6308, 39, 0, 1, 1, 1), (510, 6310, 1.3, 0, 1, 1, 1), (510, 8365, 58.4, 0, 1, 1, 1), (511, 1710, 0.4, 0, 1, 1, 1), ... usw.und müsste nach dem Durchlauf folgendermaßen ausssehen:
(510, 6308, 39, 0, 1, 1, 0, 0, 0), (510, 6310, 1.3, 0, 1, 1, 0, 0, 0), (510, 8365, 58.4, 0, 1, 1, 0, 0, 0), (511, 1710, 0.4, 0, 1, 1, 0, 0, 0), ... usw.
-
vlt sollte man die neue Datei einfach woanders hinschreiben?
-
Der Code sollte eigentlich funktionieren. Hast du im entsprechenden Verzeichnis (C:) nachgesehen ob die Datei verändert war?
-
ja das ist ja das Traurige
naja was solls, nochmal vielen Dank für deine Zeit und Hilfe
-
so habs bischen umegschrieben udn jetzt gehts , jupie , danke dir :):)
