2012-04-08 71 views
1

如何拆分從文件中提取的文本?從QFile的返回行中拆分QString

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()是正確的方法。什麼是「我與這兩個詞相同」這意味着什麼? – 2012-04-08 13:12:24

+0

我得到:USA Florida line;但不是美國,然後是佛羅里達州 – develoops 2012-04-08 13:21:48

+0

您的'QStringList'是'splitD',但您試圖打印出一個名爲'splitData'的變量。這是一個錯字。在你的問題?如果是這樣,請確保您顯示的代碼仍顯示相同的行爲。 – Troubadour 2012-04-08 15:01:28

回答

0

你把整個列表「splitData」給qDebug。這包含兩個項目「美國」和「佛羅里達州」。你的代碼很可能按你想要的方式工作,但是你錯誤地解釋了輸出。 嘗試:

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

這應該給你兩條線:

USA 
Florida 
+0

我碰到了。在輸出我有(首先qDebug):美國佛羅里達,然後應用程序崩潰 – develoops 2012-04-08 14:38:29

+0

奇怪的是,字符編碼可能是原因?你可以嘗試text.toLatin1()。split()? – 2012-04-08 14:44:45

0

可以使用運營商»或者可以拆分。操作員»也可以連接在一起。所以,你可以這樣做:

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

我弄明白,通過傳遞拆分法制表符,所以在QStringList將線返回兩個詞,accesing他們沒有崩潰的應用程序。

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++; 
     } 
    }