...
[jspeed] / src / poiascreader.cpp
index 19e9e82..2d01f6f 100644 (file)
@@ -19,6 +19,7 @@
 #include <QtCore/QFile>
 #include <QtCore/QString>
 #include <QtCore/QByteArray>
+#include <QtCore/QStringList>
 #include <QtCore/QDebug>
 #include <QtCore/QRegExp>
 #include "poiascreader.h"
@@ -29,6 +30,8 @@ PoiAscReader::PoiAscReader(QString filename): PoiReader(), filename_(filename)
 
 bool PoiAscReader::read(QList<Poi>& pois)
 {
+    pois.clear();
+
     QFile file(filename_);
 
     if(!file.open(QIODevice::ReadOnly))
@@ -37,22 +40,20 @@ bool PoiAscReader::read(QList<Poi>& pois)
         return false;
     }
 
-    QString data = QString(file.readAll());
-    static QRegExp matcher("([0-9]{1,3})\\.([0-9]+), ([0-9]{1,3})\\.([0-9]+), \"(.*)\"");
-    matcher.setMinimal(true);
-
-    int pos = 0;
-
-    while((pos = matcher.indexIn(data, pos)) != -1)
+    while(!file.atEnd())
     {
-        pos += matcher.matchedLength();
+        QString data(file.readLine());
+        QStringList parts = data.split(",");
 
-        Poi poi;
+        if(parts.size() < 3)
+        {
+            continue;
+        }
 
-        bool ok;
+        QString longitude = parts.at(0).trimmed();
+        QString latitude = parts.at(1).trimmed();
 
-        QString latitude = matcher.cap(3) + "." + matcher.cap(4);
-        QString longitude = matcher.cap(1) + "." + matcher.cap(2);
+        bool ok;
 
         double doubleLatitude = latitude.toDouble(&ok);
 
@@ -68,9 +69,13 @@ bool PoiAscReader::read(QList<Poi>& pois)
             continue;
         }
 
+        QString name = parts.at(2).trimmed();
+        name.remove('"');
+
+        Poi poi;
         poi.latitude = doubleLatitude;
         poi.longitude = doubleLongitude;
-        poi.name = matcher.cap(5);
+        poi.name = name;
 
         pois.push_back(poi);