[gelöst] Geschwindigkeit von QRegExp
Verfasst: 1. November 2008 20:15
Hallo Leute,
kann es sein, dass QRegExp sehr langsam ist? Ich habe eine TextDatei zeilenweise einzulesen und diverse Informationen daraus zu ziehen. Funktioniert eigentlich auch einwandfrei!
Die Datei hat gute 60.000 Zeilen und ist ca. 6 MB groß. Das einlesen der Datei geht sehr schnell! Die Werte ziehe ich mit dem langen Regulären Ausdruck raus und speichere diese in einer doppelt verketteten Datenstruktur ab. Also, die Struktur hat dann auch ca. 60.000 Elemente, da der Reguläre Ausdruck eigentlich auf jede Zeile matcht.
Die Schleife in der der Reguläre Ausdruck auf jede Zeile ausgeführt wird braucht ewig, ca. 3 Minuten. Das ist der Flaschenhals. Das einlesen der Datei geht in ms. Ebenso das komplette durchlaufen der Datenstruktur.
Hier mal den Code-Ausschnitt, der so lange braucht (bzw. wie ich den QRegExp verwende):
Hab ich da irgendein Fehler drin oder löse ich das zu umständlich? Oder ist QRegExp wirklich langsam?
Vielen Dank für jeden Hinweis!
LG john
kann es sein, dass QRegExp sehr langsam ist? Ich habe eine TextDatei zeilenweise einzulesen und diverse Informationen daraus zu ziehen. Funktioniert eigentlich auch einwandfrei!
Die Datei hat gute 60.000 Zeilen und ist ca. 6 MB groß. Das einlesen der Datei geht sehr schnell! Die Werte ziehe ich mit dem langen Regulären Ausdruck raus und speichere diese in einer doppelt verketteten Datenstruktur ab. Also, die Struktur hat dann auch ca. 60.000 Elemente, da der Reguläre Ausdruck eigentlich auf jede Zeile matcht.
Die Schleife in der der Reguläre Ausdruck auf jede Zeile ausgeführt wird braucht ewig, ca. 3 Minuten. Das ist der Flaschenhals. Das einlesen der Datei geht in ms. Ebenso das komplette durchlaufen der Datenstruktur.
Hier mal den Code-Ausschnitt, der so lange braucht (bzw. wie ich den QRegExp verwende):
Code: Alles auswählen
QRegExp rx(".*\\d+,(-?\\d{1,3}),(-?\\d{1,3}),\\d+,\\d+,'([^']*)',(\\d+),'([^']*'),(\\d+),'([^']*'),(\\d+)");
QTextStream stream;
QFile file(fileName);
QPoint koord;
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Fehler beim öffnen der Datei!";
return;
}
while(stream.atEnd() == false) {
line = stream.readLine();
if(rx.indexIn(line) != -1) {
koord.setX(rx.cap(1).toInt());
koord.setY(rx.cap(2).toInt());
...
...
...
}
}Vielen Dank für jeden Hinweis!
LG john