Seite 1 von 1

Einfügen von String in Textdatei

Verfasst: 4. November 2010 15:39
von qrk123
Hallo,

ich versuche gerade einen String an einer speziellen Stelle in eine Textdatei einzufügen. Versucht habe ich es wie folgt, leider ohne Ergebnis.

Code: Alles auswählen

 textFile = new QFile( "aaa.txt" );
     if (!textFile->open(QIODevice::ReadWrite | QIODevice::Text))
         return false;

     QTextStream in(textFile);
     QString line = in.readLine();
     while (!line.isNull()) {
         line = in.readLine();
     }
     line.insert(100, "ABCABCABC");
     QTextStream out(textFile);
     out << line;
     textFile->close();
Weiß Jemand warum es nicht geht oder kennt einen anderen einfachen Weg?

vielen Dank!

Verfasst: 4. November 2010 18:30
von Christian81
Und was genau geht nicht?
Abgesehen davon - Du liest alle Zeilen ein und die letzte benutzt Du dann, schreibst an Position 100 der letzten Zeile was hin und gibst diese eine modfizierte Zeile wieder aus. Ich glaube nicht dass es das ist was Du willst.

Verfasst: 5. November 2010 08:39
von pfid
Ich würde für die Abbruchbedingung der Leseschleife auch lieber while (!in.atEnd()) verwenden.

Verfasst: 5. November 2010 11:27
von qrk123
vielen Dank für den Hinweis, mir war nicht klar, dass er es in die letzte Zeile schreibt. Ist auch nicht so gedacht, aber bekomme ich so sicher auch in eine vorherige, wenn ich die Schleife modifiziere. =)

Re: Einfügen von String in Textdatei

Verfasst: 5. November 2010 11:33
von Mani99
qrk123 hat geschrieben:ich versuche gerade einen String an einer speziellen Stelle in eine Textdatei einzufügen.
Ich glaube das wird so nicht funktionieren, du musst den kompletten inhalt der textdatei auslesen, den text ändern, und danach kompletten wieder in die textdatei schreiben!

Verfasst: 5. November 2010 11:38
von qrk123
wieso nicht? mit dem Eintragen in die letzte Zeile hat es so gerade schon geklappt...

Verfasst: 5. November 2010 11:41
von Mani99
Sorry, mein fehler, hab nicht gesehen, das du in deinem source beispiel alle zeilen ausliest.

Verfasst: 5. November 2010 14:02
von qrk123
Ich habe jetzt versucht mit Verändern der Schleife etwas innerhalb des Textes auszugeben. Funktioniert aber leider nicht, wenn ich so wie hier die Zeilen zähle. Er schreibt am Ende gar nichts rein.

Code: Alles auswählen

     QTextStream in(textFile);
     QString line = in.readLine();
     int numLines = 0;
     while (!line.isNull()) {
         line = in.readLine();
         numLines++;
         if( numLines == 5 )
            line.insert( 0, "TEXT" );
     }
     QTextStream out(textFile);
     out << line;
Fällt jemandem was auf und könnte helfen?

vielen Dank!

Verfasst: 5. November 2010 15:21
von RHBaum
Text und zwischendrinn anfuegen ...
beschaeftige dich mal bissi mit Dateien und "Strömen"(Streams). Dann wird Dir vielleicht auch bissi mehr ueber Dein Problem klar.

Irgendwann wird Dir dann sicherlich klar, das an einer Datei nix einfuegen kannst ! Dateien von ihrer eigenen Physik her unterstützen genau 3 operationen :
Anfügen (und zwar genau und ausschliesslich am Ende)
Abschneiden(EOF Pointer nach vorne verlegen, und chunks hinten auf unbenutzt setzen)
Werte ersetzen (ueberschreiben, aber nix mit einfügen, aenderst du 20 bytes in nem strom, sind genau diese Bytes anders, aber es sind nicht mehr oder weniger geworden)

Damit musst du auskommen !

Ciao ...

Verfasst: 5. November 2010 16:08
von qrk123
Mhmm, versteh ich leider grad nicht . Ich veränder doch nichts an einem Stream. Ich lade mir einen Stream in einen String, veränder den String, kopiere den String wieder in einen anderen outstream und gebe das dann in einer Datei aus.

Wie sollte man sonst den Inhalt einer Datei verändern?

Gruß

Verfasst: 5. November 2010 16:26
von kater
Na das machst du eben nicht. Du bentzt die Variable line zum lesen und schreiben und ueberschreibst sie zwischendurch auch noch.