[C/C++] Textdatei -> In bestimmte Zeile schreiben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von DarkBug, 26. November 2008 .

  1. 26. November 2008
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    Textdatei -> In bestimmte Zeile schreiben

    Hallo Leute,
    ich möchte gerne in eine Textdatei auf einer bestimmten Zeile etwas schreiben lassen und dabei den bisherigen Inhalt auf der Zeile löschen. Unter folgendem Link habe ich halbwegs gelernt wie das mit dem auslesen einer bestimmten Zeile funktioniert: Klick mich!

    Hier nochmal der Code:

    Code:
    #include <fstream>
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
     ifstream f; // Datei-Handle
     string s;
     string n;
     f.open("test.txt", ios::in); 
     
     for ( int i=0;!f.eof();i=i+1) 
     {
     
     if (i==10)
     {
     getline(f, s); 
     cout << s << endl; 
     }
     else {
     f.eof();
     getline(f,n);
     }
    
     }
     f.close(); 
    }
    
    Ich habe bereits versucht den Code für das Schreiben anzupassen, bekomme das aber nicht hin. Hier mal mein Versuch:

    Code:
    #include <fstream>
    #include <conio>
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
     fstream f;
     string s;
     string n;
     f.open("Datei.txt", ios::in | ios::out);
     
    
     for ( int i=0;!f.eof();i=i+1) 
     {
     
     if (i==4)
     {
     getline(f,n);
     f << "Textausgabe" << endl;
     }
     else {
     f.eof();
     getline(f,n);
     }
     }
     
     f.close();
     getch(); 
    }
    
    Ich habe es auch schonmal mit dem write() Befehl versucht, aber irgentwie klappt das auch nicht. Ich hoffe ihr könnt mir weiterhelfen.

    Mit freundlichen Grüßen,
    DarkBug
     
  2. 27. November 2008
    AW: Textdatei -> In bestimmte Zeile schreiben

    eine simple idee wäre
    1) du schreibst alle zeilen bis zu der wo du änderungen haben wilslt in eine TEMP datei..
    2) du fügst die zeile hinzu die du haben willst
    3) du nimst den rest (solltest du den rest der datei bruachen) und fügst ihn der TEMP datei hinzu
    4) löchst die original datei
    5) speicherst die TEMP datei als die originale

    wäre jetzt mal ein schneller workaround
     
  3. 27. November 2008
    AW: Textdatei -> In bestimmte Zeile schreiben

    Hoi,

    das Problem ist, du kannst in eine Datei nicht gleichzeitig lesen und schreiben. Du musst also zuerst in einen temporären string oder ostringstream schreiben und dann die datei zum schreiben öffnen.

    Ungefähr so:
    Code:
    #include <fstream>
    #include <sstream>
    #include <conio>
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
     ifstream input;
     ofstream output;
     ostringstream oss;
     string s;
     string n;
     
     input.open("Datei.txt");
     
     if (input.is_open())
     {
     for ( int i=0;!f.eof();i=i+1) 
     {
     if (i==4)
     {
     getline(f,n);
     oss << "Textausgabe" << endl; // schreibt in den ostringstream
     }
     else
     {
     //f.eof(); <- bringt hier nichts, weil du nichts mit dem rückgabewert anstellst
     getline(f,n);
     }
     }
     input.close();
     }
     
     output.open("Datei.txt");
     if (output.is_open())
     {
     output << oss.str();
     output.close();
     }
     
     
     cin.get(); 
    }
    das mit dem umbenennen würd ich nich machen, weils da keine plattformunabhängige implementation gibt.
     
  4. 27. November 2008
    AW: Textdatei -> In bestimmte Zeile schreiben

    Erstmal danke für eure Posts. ^^

    @wlan: Das ist denke ich ja dann fast das selbe, was pyro gerade gemacht hat, oder?

    @pyro: Das sieht ganz nett aus, müsste thoretisch funktionieren. Du hast einen kleinen Fehler gemacht, nämlich das f nicht ersetzt. Habs bei mir mal gemacht:

    Code:
    #include <fstream>
    #include <sstream>
    #include <conio>
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
     ifstream input;
     ofstream output;
     ostringstream oss;
     string s;
     string n;
    
     input.open("Datei.txt");
    
     if (input.is_open())
     {
     for ( int i=0;!input.eof();i=i+1)
     {
     if (i==4)
     {
     getline(input,n);
     oss << "Textausgabe" << endl; // schreibt in den ostringstream
     }
    
     }
     input.close();
     }
    
     output.open("Datei.txt");
     if (output.is_open())
     {
     output << oss.str();
     output.close();
     }
    
    
     
    }
    
    Das Problem ist er compiliert die Datei und führt sie auch ohne Fehler aus, jedoch ist an der Textdatei absolut nichts verändert worden. Ich denke mir mal das es daran liegt das er bei output nicht weiß in welche Zeile er schreiben soll. Kann man das nicht irgentwie hinbekommen?
     
  5. 28. November 2008
    AW: Textdatei -> In bestimmte Zeile schreiben

    ähm imprinzip ja, nur ohne vorgegeben source
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.