Aus einer txt-Datei lesen und bestimmten Text ersetzen



  • Hallo Leute,

    ich möchte ein C++ -Programm schreiben womit ich aus einer Textdatei lesen kann und zum Beispiel eine komplette Zeile ersetzen kann durch einen anderen Text.
    Oder 2.Möglichkeit innerhalb bestimmter Zeichen (z.B. den Text innerhalb von 2 Klammern {Text} ) ersetzen kann.

    Ich habe mich zwar hier bischen informiert, aber so eine richtig gute Lösung konnte ich leider nicht finden., vorallem eine kompakte Lösung finden.
    Hoffentlich könnt ihr mir paar effektive Vorschläge geben. Vielen Dank schonmal



  • Das beste ist, du liest den Text ein und bearbeitest ihn innerhalb deines Programmes.Lies ihn zum beispiel in einen std::vector<std::string> ein oder nur in einen std::string und bearbeite ihn dann wie du es magst, danach schreibst du einfach alles wieder zurück.



  • @Firefighter

    hättest du ein konkretes Beispiel für mich?



  • Nimm dir einen ifstream und einen ofstream, oeffne die Datei aus der du lesen willst und die in die du schreiben willst, lies aus dem ifstream mittels getline() alle Zeilen und schreib sie mittels << direkt wieder in den ofstream, nur bei der Zeile, die du ersetzen willst schreibst du was anderes.

    Sind geschaetzte 10 Zeilen - ist das kompakt? 🙂



  • @kenux

    #include<iostream>
    #include<fstream>
    #include<string>
    
    int main()
    {
        std::ifstream datei("text.txt");//zum lesen vorbereiten
        std::vector<std::string> zeilen //hier werden die zeilen aus der datei reingepackt
        std::string temp; //zum temporären speichern der zeile
    
        while(getline(datei,temp))//solange lesen, solange zeilen vorhanden sind
        {
           zeilen.push_back(temp);//in den vector hinten ran pushen
        }
        datei.close();
        datei.clear();
    
    //...und ab hier kannst du dann auf dem std::string-vector arbeiten
    //...ganz viel gearbeitet und wir schreiben wieder zurück
       std::ofstream datei_schreiben("ausgabe.txt");
    
       for(int i = 0;i<zeilen.size();i++)
       {
         datei_schreiben<<zeilen[i]<<std::endl;
       }
       datei_schreiben.close();
    }
    

    Das bearbeiten der strings überlasse ich jetzt aber dir.



  • Vielen Dank für den Vorschlag Firefighter.

    Deine Lösung ist sehr Interessant, ich dachte man kann sowas nur mit fstream machen...
    Gibt es da Vor-und Nachteile zwischen deinem Vorschlag und der fstream-Methode?



  • Soweit ich weiß hat das keine Vor und keine Nachteile. Der Punkt ist der, das du bei fstream immernoch explizit angegeben musst ob du sie lesen willst oder schreiben willst. Der ifstream sagt automatisch du willst lesen, der ofstream sagt du willst schreiben.



  • danke für die antwort firefighter.

    leider tut das Programm nicht genau das was ich will.
    ich würde gerne, dass das Programm folgendes tut:
    also das Programm soll aus EINER Textdatei (text.txt) eine bestimmte Zeile auslesen und diese Zeile durch einen vorgegeben Text ersetzen.

    Beispiel Inhalt text.txt:

    mofa
    rennrad
    motorrad

    jetzt soll nun rennrad durch auto ersetzt werden



  • Wie genau ist denn jetzt dein Code? Du musst es schon im Prinzip wie von Firefighter vorgeschlagen machen.
    - Die Datei vollständig einlesen.
    - Die Zeile ändern.
    - Die Datei wiede vollständig rausschreiben.



  • wenn ich das so wie firefighter mache dann bleibt in der datei nur die einzige Zeile übrig, ich will aber das alles andere bestehen bleibt



  • Dann zeige bitte mal deinen Code.



  • So, hab eben ein Programm geschrieben und es funktioniert 😉

    #include <iostream>
    #include <fstream>
    #include <conio.h>
    #include <vector>
    
    int main()
    {
        std::vector<std::string> vector_string_fileindex;
        std::string string_filename = "bla.txt";
        std::string string_replacingstring = "ich ersetze OMFG";
        std::string string_toreplacingstring = "omfg";
    
        std::ifstream ifstream_file(string_filename.c_str());
        if(!ifstream_file)
        {
            std::cout << "Datei nicht gefunden!";
            getch();
            return 0;
        }
    
        std::string string_temp;
        while(getline(ifstream_file, string_temp))
        {
            if(string_temp == string_toreplacingstring)
            {
                vector_string_fileindex.push_back(string_replacingstring);
            }
            else
            {
                vector_string_fileindex.push_back(string_temp);
            }
        }
        ifstream_file.close();
    
        std::ofstream ofstream_file("bla.txt", std::ios::trunc);
    
        for(int i = 0; i < vector_string_fileindex.size(); i++)
        {
            ofstream_file << vector_string_fileindex[i] << std::endl;
        }
    }
    

    Damit kannste jetzt nach einer ganzen Zeile suchen und sie ersetzen.

    fy


Anmelden zum Antworten