textdateien umschreiben



  • 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 :):) ❤


Anmelden zum Antworten