2012-04-08 2 views
1

Как можно разбить такой текст из файла?Сплит QString из возвращаемой строки QFile

USA Florida 
Russia Murmansk 
Germany Bonn 

В США, Флорида, Россия, Мурманск ... Каждое слово должно быть сохранено в QString. В основном я делаю так:

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(); 

Когда я пытаюсь получить значение из QStringList с .value(index) я получаю ту же линию с обоих слов. Как правильно разбить эти слова?

+0

Я не понимаю проблемы. split() - правильный подход. Что означает «я получаю одну строку с обоими словами», точно означает? –

+0

Я получаю: США Флорида линия; но не в США, а затем во Флориде – develoops

+0

Ваш 'QStringList' является' splitD', но вы пытаетесь распечатать переменную, называемую 'splitData'. Это опечатка. в вашем вопросе? Если это так, убедитесь, что код, который вы показываете, все еще показывает то же поведение. – Troubadour

ответ

0

Вы помещаете весь список «splitData» в qDebug. Это содержит два пункта: «США» и «Флорида». Ваш код, скорее всего, работает так, как вы хотите, но вы неправильно интерпретируете вывод. Try:

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

Это должно дать вам две строки:

USA 
Florida 
+0

Я получаю сбой. на выходе у меня есть (для первого qDebug): USA Florida, а затем сбой приложений – develoops

+0

Странная, может ли кодировка символов быть причиной? Можете ли вы попробовать text.toLatin1(). Split()? –

0

Вы можете использовать оператор »или вы можете разделить. Оператор »также может быть конкатенирован. Таким образом, вы можете сделать что-то вроде:

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

я понять это, переходя символ табуляции в раздельном способе, так и в QStringList будет возвращены два слова из строки, экранные их без сбоев приложения.

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++; 
     } 
    } 
Смежные вопросы