[gelöst] QMap speichern

Alles rund um die Programmierung mit Qt
Antworten
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

[gelöst] QMap speichern

Beitrag von hs60 »

Hallo,

ich suche einen Weg, die QMap Einträge schnell zu speichern bzw. wieder einzulesen. Derzeit speichere ich die Einträge zeilenweise in eine Textdatei, was zwar funktioniert, aber die Zuordnung der einzelnen Zeilen beim Einlesen der Textdatei zur QMap dauert bei 2000 Einträgen schon mal 6 bis 7 Sekunden.

Gibt es einen schnelleren Weg bzw. eine bessere Methode?

mfg
Herbert
Zuletzt geändert von hs60 am 4. Februar 2010 12:12, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QMap speichern

Beitrag von franzf »

hs60 hat geschrieben:Einlesen der Textdatei zur QMap dauert bei 2000 Einträgen schon mal 6 bis 7 Sekunden.
Öha, da ist ja jeder XML-Parser bei der 1000-fachen Größe schneller...
Ich tippe auf miesen Alkorythmus - äh Algorithmus.

Zeig mal wie du das bisher machst, dann gibt es konkrete Tips.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Probier es doch mal über QDataStream in eine Datei bzw. aus ihr heraus zu streamen.
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag von hs60 »

mit dieser Routine lese ich derzeit aus:

Code: Alles auswählen

void MainWindow::ReferenzListeLesen(QString pn)
{
    QString s1, s2;

    map.clear();

    QString kDateiName = "ref" + pn + ".txt";
    kDatei = new QFile(PgmPfad + "/" + kDateiName);
    if (kDatei->exists(PgmPfad + "/" + kDateiName))
    {
      if (kDatei->open(QIODevice::ReadOnly | QIODevice::Text))
      {
        while (!kDatei->atEnd())
        {
            QString s1 = kDatei->readLine();    // DateiName
            s1 = s1.left(s1.length()-1);

            QString s2 = kDatei->readLine();    // DateiDatum
            s2 = s2.left(s2.length()-1);

            map[s1] = s2;
        }
        kDatei->close();
      }
    }
}
Ich wollte das ganze auch mit TextStream versuchen, doch da komme ich mit der Dokumentation zu TextStream schon nicht klar.

Eine Deklaration wie z.B.

Code: Alles auswählen

QTextStream stream(&kDatei)
scheitert bereits in einer Fehlermeldung, obwohl es in der Doku so beschrieben ist.

mfg
Herbert
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Ich hätte an soetwas gedacht:

Code: Alles auswählen

QMap             myMap;
QDataStream stream(kDatei);
stream >> myMap;
und

Code: Alles auswählen

QDataStream stream(kDatei);
stream <<  myMap;
Zu deinem Versuch: kDatei ist bereits ein Zeiger, daher muß kein & davor.
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag von hs60 »

Vielen herzlichen Dank. Das dürfte funktionieren.

mfg
Herbert
Antworten