QString line.split

时间:2015-08-29 17:18:05

标签: c++ qt

我在QT上遇到分割功能问题。我有一个文本文件,第一行是这样的:

10,100;100,100;100,100;100,200;100,200;300,200;300,200;300,350;300,350;250,350;250,350;250,300;250,300;200,300;200,300;200,400;200,400;10,400;10,400;10,100

这里每两个数字代表一个带有x和y值的点,分号表示分数。每个分号后都有一个新观点。

我想要做的是按元素分割这些数字;

元素0:10
要素1:100
要素2:100
要素3:100
...

我已设法做到这一点,但文本文件中没有任何分号或冒号。

文本文件的第一行:

10 100 100 100 100 200 300 200 300 350 250 350 250 300 200 300 200 400 10 400 10 100

我就这样做了:

void Dialog::readFile()
{
    QFile file("/Path/of/the/text/file/Data.txt");

    if(!file.open(QIODevice::ReadOnly)) {
        QMessageBox::information(0, "info", file.errorString());
    }

    QString line = file.readLine();
    qDebug() << "line:" << line << "\n";
    QStringList list = line.split(" ");
    double element;

    for(int i = 0; i < list.size(); i++) {
        element = list.at(i).toDouble();
        points_.append(element);
        qDebug() << "element:" << element << "\n";
    }
}

此代码的输出为:

line: "10 100 100 100 100 200 300 200 300 350 250 350 250 300 200 300 200 400 10 400 10 100\r" 
element: 10 
element: 100 
element: 100 
element: 100 
element: 100 
element: 200 
element: 300 
element: 200 
....

我想以完全相同的方式做到这一点。有什么建议吗?

PS:我是QT的新手,所以请考虑一下。

1 个答案:

答案 0 :(得分:1)

您可以使用正常表达式QString::split重载QRegExp或下一个QRegularExpression

QStringList list = line.split(QRegExp(",|;")); // ",|;" matches ',' or ';'

QRegExp被称为弃用,但它可以在这里完成工作。