2012-04-08 28 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++; 
     } 
    }