【问题标题】:Split QString from returned line of QFile从 QFile 的返回行中拆分 QString
【发布时间】:2012-04-08 12:24:50
【问题描述】:

如何拆分从文件中提取的此类文本?

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

当我尝试使用 .value(index) 从 QStringList 获取值时,我得到的两个词都在同一行。 如何正确拆分这些单词??

【问题讨论】:

  • 我不明白这个问题。 split() 是正确的方法。 “我两个词都在同一行”到底是什么意思?
  • 我得到:美国佛罗里达线;但不是美国,然后是佛罗里达
  • 您的QStringListsplitD,但您正试图打印出一个名为splitData 的变量。这是笔误吗。在你的问题?如果是这样,请确保您显示的代码仍然显示相同的行为。

标签: qt qt4 qstring qfile


【解决方案1】:

你把整个List“splitData”放到qDebug中。这包含两个项目“美国”和“佛罗里达”。您的代码很可能按照您希望的方式工作,但您误解了输出。 试试:

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

这应该给你两行:

USA
Florida

【讨论】:

  • 我崩溃了。在输出我有(对于第一个 qDebug):美国佛罗里达州,然后应用程序崩溃
  • 奇怪,字符编码可能是原因吗?你可以试试 text.toLatin1().split() 吗?
【解决方案2】:

您可以使用运算符 » 或者您可以拆分。运算符 » 也可以连接。所以你可以这样做:

QString country, city;
txStream » country » city;

【讨论】:

    【解决方案3】:

    我想通了,通过在 split 方法中传递制表符,所以在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++;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多