Seite 1 von 1

[gelöst] QMap speichern

Verfasst: 4. Februar 2010 10:50
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

Re: QMap speichern

Verfasst: 4. Februar 2010 10:59
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.

Verfasst: 4. Februar 2010 11:19
von archer
Probier es doch mal über QDataStream in eine Datei bzw. aus ihr heraus zu streamen.

Verfasst: 4. Februar 2010 11:47
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

Verfasst: 4. Februar 2010 12:01
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.

Verfasst: 4. Februar 2010 12:12
von hs60
Vielen herzlichen Dank. Das dürfte funktionieren.

mfg
Herbert