txt Datei als "Template"



  • Hallo erstmal,
    und vorab ich bin neu bei C++ und hab über Google etc. leider nichts brauchbares für mein Problem gefunden, aber zum Thema.

    ich habe eine txt-Datei erstellt in der HTML-Code drin steht. Außerdem sind im HTML Code Worte die mir als Platzhalter dienen sollen. Ich möchte nun die txt datei einlesen und jeden Platzhalter duch einen String ersetzen den der Benutzer selbst eingeben kann. Zum Schluss soll dann der komplette Text (mit geänderten Platzhaltern) wieder ausgegeben werden.
    Ich weiß nur nicht wie ich die mit ifstream eingelesene Datei bearbeiten kann. Die Ausgabe muss dann wahrscheinlich mit ofstream erfolgen?? Ist das irgendwie mit sog. Zeigern zu lösen?? Wie gesagt ich bin neu und kenne mich noch nicht so gut aus

    danke für jede Hilfestellung
    LG -Allan-



  • Kann ein Platzhalter nur in einer Zeile stehen oder ist auch möglich:
    PLATZ
    HALTER

    ? Sonst einfach Zeile für Zeile einlesen( std::string string; std::getline(file_stream, string) ) und dann mit find (string.find("PLATZHALTER")) den String suchen. Rauslöschen und neuen einfügen ...



  • Die Platzhalter stehen immer in einer Zeile (nur ein Wort) also sollte es so gehen.
    Wie lösch ich den Platzhalter raus und füg den neuen ein??

    danke für deine antwort



  • Die std::string-Klasse hat auch eine replace-Funktion.



  • es gibt auch die boost::string lib. da gibts auch string::replace. Da kannst du dann direkt sowas machen:

    string inhalt;
    // inhalt füllen
    
    replace(inhalt, "platzhalter", "der wert deiner variablen");
    


  • ich denke ich habs jetzt gefunden.
    THX Badestrand für den link zur replace funktion.
    Wenn man eure beiden ideen kombiniert geht es wie es in nem Forum stand:

    string input;
    string ersetzen;
    
    ifstream in("Testdatei.txt");
    in>>input;
    cin>>ersetzen;
    input.replace(input.find("Platzhalter"),länge des Platzhalters,ersetzen);
    ofstream out("Testdateiout.txt");
    out<<input;
    

    muss ich eig. dann noch out.close() und in.close() angeben??
    Hoffe so funktionierts jetzt. Gleich ma ausprobieren
    Danke soweit.



  • -Allan- schrieb:

    muss ich eig. dann noch out.close() und in.close() angeben??

    nein, das machen ihre destruktoren.


Anmelden zum Antworten