2012-04-08 6 views
1

Wie kann ich solchen Text aus einer Datei abgerufen teilen?Split QString von zurückgegebenen Zeile von QFile

In USA, Florida, Russland, Murmansk ... Jedes Wort sollte in einem QString gespeichert werden. Grundsätzlich ich tue so:

QFile df("../MyData/visit.DAT"); 

    if (!df.open(QIODevice::ReadOnly | QIODevice::Text)) { 

     qDebug()<<"Could not open file for reading"; 
     return; 
    } 

    QTextStream txStream(&df); 
    while (!txStream.atEnd()) { 

     QString text = txStream.readLine(); 
     QStringList splitD = text.split(" "); 
     qDebug() << "-"<<splitD; 
    } 

    dataFile.close(); 

Wenn ich versuche, Wert zu erhalten von QStringList mit .value(index) i gleichen Linie mit den beiden Wörtern zu bekommen. Wie teilt man diese Wörter richtig?

+0

Ich verstehe das Problem nicht. split() ist der richtige Ansatz. Was bedeutet "ich bekomme die gleiche Zeile mit beiden Wörtern" genau gemeint? –

+0

Ich bekomme: USA Florida Linie; aber nicht USA und dann Florida – develoops

+0

Ihre 'QStringList' ist' splitD', aber Sie versuchen, eine Variable namens 'splitData' auszudrucken. Ist das ein Tippfehler? in deiner Frage? Wenn ja, stellen Sie bitte sicher, dass der Code, den Sie zeigen, immer noch das gleiche Verhalten zeigt. – Troubadour

Antwort

0

Sie legen die gesamte Liste "splitData" zu qDebug. Dieses enthält zwei Artikel "USA" und "Florida". Ihr Code funktioniert höchstwahrscheinlich so, wie Sie es wünschen, aber Sie interpretieren die Ausgabe falsch. Versuchen:

qDebug() << splitData.at(0); 
qDebug() << splitData.at(1); 

Dies sollten Sie zwei Linien geben:

USA 
Florida 
+0

Ich bekomme einen Unfall. am Ausgang habe ich (für den ersten qDebug): USA Florida, und dann App stürzt ab – develoops

+0

Seltsam, könnte Zeichencodierung die Ursache sein? Können Sie versuchen, Text.toLatin1(). Split()? –

0

Sie den Operator verwenden können »oder können Sie teilen. Der Operator »kann auch verkettet werden. So können Sie so etwas wie:

QString country, city; 
txStream » country » city; 
0

ich es herausfinden, durch Tabulatorzeichen in Split-Methode übergeben, so in QStringList werden zwei Worte aus der Leitung zurückgeführt werden, accesing sie ohne Anwendung abstürzt.

QTextStream txStream(&df); 
    while (!txStream.atEnd()) { 

     QString text = txStream.readLine(); 
     QStringList splitD = text.split("\t"); 

     if (i%2==0) { 

      qDebug() << "Country : "<<splitD.at(0); 
      i++; 

     } else { 

      qDebug() << "City : "<<splitD.at(1); 
      i++; 
     } 
    }