Einfügen von String in Textdatei

Alles rund um die Programmierung mit Qt
Antworten
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Einfügen von String in Textdatei

Beitrag 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!
Zuletzt geändert von qrk123 am 5. November 2010 11:40, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Ich würde für die Abbruchbedingung der Leseschleife auch lieber while (!in.atEnd()) verwenden.
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Beitrag 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. =)
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Re: Einfügen von String in Textdatei

Beitrag 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!
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Beitrag von qrk123 »

wieso nicht? mit dem Eintragen in die letzte Zeile hat es so gerade schon geklappt...
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Beitrag von Mani99 »

Sorry, mein fehler, hab nicht gesehen, das du in deinem source beispiel alle zeilen ausliest.
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Beitrag 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!
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Beitrag 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ß
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Na das machst du eben nicht. Du bentzt die Variable line zum lesen und schreiben und ueberschreibst sie zwischendurch auch noch.
Antworten