Textdatei auslesen, bearbeiten, speichern...

Alles rund um die Programmierung mit Qt
Antworten
wojtek85
Beiträge: 37
Registriert: 11. Mai 2007 19:56
Wohnort: Köln
Kontaktdaten:

Textdatei auslesen, bearbeiten, speichern...

Beitrag von wojtek85 »

Hallo,
möchte gerne eine Textdatei einlesen, bearbeiten und anschließend abspeichern, nicht unbedingt überschreiben sondern als "Save As".

Datei einlesen und anzeigen klappt wunderbar:

Code: Alles auswählen

QString commentFile = QFileDialog::getOpenFileName(this, tr("Open"), "/", tr("Textdatei (*.txt)"));

    if (!commentFile.isEmpty())
    {
        QFile comment(commentFile);
        if (comment.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QTextStream in(&comment);
            while (!in.atEnd())
            {
                QString line = in.readLine();
                commentsTextBox->append(line);  //commentstextbox ist ein Qtextedit
            }
        }
     }
Bearbeiten kann man das Ding ja im QTextEdit automatisch, allerdings haperts bei mir beim speichern. Hatte mir überlegt das er eine neue QFile anlegt, da mit QTextStream out(...) das zeilenweise wieder auslese und in der Datei speichere. Aber irgendwie krieg ich das nicht hin... bin ich auf dem falschen Pfad oder hat jmd. einen Tipp?? Es sei darauf hingewiesen dass ich das nicht in einer Funktion machen will, sondern als seperate Funktion.

Danke. Mfg, Wojtek (qt4-Anfänger :lol: )
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und wo genau ist das Problem? Den Code liefern wir Dir nicht, aber deinen können wir uns gern anschauen. Die Doku zu QTextStream & QFile enthält imo schon ein Beispiel dazu.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wojtek85
Beiträge: 37
Registriert: 11. Mai 2007 19:56
Wohnort: Köln
Kontaktdaten:

Beitrag von wojtek85 »

Code: Alles auswählen

void MainWindow::saveComment()
{
    QFile newComment("comment.txt");
    if(newComment.open(QIODevice::WriteOnly  | QIODevice::Text))
    {
        QTextStream out(&newComment);
        out << "test" << endl;
        newComment.close();
    }

    QFileDialog saveCommentDialog;
    newComment = saveCommentDialog.getSaveFileName(this, tr("Save"), "/", tr("Textdatei (*.txt)"));
}
Hier ist mein Code zum Speichern. Allerdings kriege ich da ne Fehlermeldung vom qfile header. War auch nicht drauf aus, dass mir hier jmd. nen Code postet...

Hier wollte ich erstmal nur testen das er mir eine Datei ausgibt mit "test" als Inhalt.

W
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

getSaveFileName ist ne static function - also nicht nötig eine Instanz von QFileDialog zu erstellen

Und wie lautet die Fehlermeldung?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wojtek85
Beiträge: 37
Registriert: 11. Mai 2007 19:56
Wohnort: Köln
Kontaktdaten:

Beitrag von wojtek85 »

C:/Qt/4.2.3/include/QtCore/../../src/corelib/io/qfile.h: In member function `void MainWindow::saveComment()':
C:/Qt/4.2.3/include/QtCore/../../src/corelib/io/qfile.h:168: error: `QFile& QFile::operator=(const QFile&)' is private
mainwindow.cpp:521: error: within this context
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Und jetzt noch was in mainwindow.cpp:521 steht... kommt denk ein bischen mit!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wojtek85
Beiträge: 37
Registriert: 11. Mai 2007 19:56
Wohnort: Köln
Kontaktdaten:

Beitrag von wojtek85 »

Das ist ja das Ding, kann mit den Fehler nichts anfangen bzgl. 520 in der cpp, da das hier die Zeilen 519 und 520 sind :

Code: Alles auswählen

    newComment = QFileDialog::getSaveFileName(this, tr("Save"),
                          "/", tr("Textdatei (*.txt)"));
Weiss nicht was daran falsch ist...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

ok, das hätte ich eher sehen müssen... FileDialog::getSaveFileName() gibt einen QString zurück und kein QFile.
Ich schätze Du solltest erst den Dateinamen vom Nutzer abfragen, dann die Datei öffnen und die Daten reinschreiben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
wojtek85
Beiträge: 37
Registriert: 11. Mai 2007 19:56
Wohnort: Köln
Kontaktdaten:

Beitrag von wojtek85 »

Jo ok, jetzt hab ichs auch kapiert. Klingt auch logisch, weil eine Datei öffnen und beschreiben die es nicht gibt ist schwierig, aber so klappt es wunderbar:

Code: Alles auswählen

    QString comment = QFileDialog::getSaveFileName(this, tr("Save"),
                          "/", tr("Textdatei (*.txt)"));

    QFile newComment(comment);
    if(newComment.open(QIODevice::WriteOnly  | QIODevice::Text))
    {
        QTextStream out(&newComment);
        out << "test" << endl;
        newComment.close();
    }
Vielen Dank für die Hilfe!

Gruß, Wojtek
Antworten