我有一个关于 QStringList 的问题:
我有一个包含几 1000 行数据的 .txt 文件,其后是:
+-------------------------+-------------------+-----------------------|
| Conditions at | X1 | X2 |
+-------------------------+-------------------+-----------------------|
| Time [ms] | 0.10780E-02 | 0.27636E-02 |
| Travel [m] | 0.11366E+00 | 0.18796E+01 |
| Velocity [m/s] | 0.43980E+03 | 0.13920E+04 |
| Acceleration [g] | 0.11543E+06 | 0.20936E+05 |
…
其中标题(Conditions at...)和第一列(Travel、Time...)始终保持不变,但每次运行的值都不同。我想从这个文件中读取值(仅!)到 GUI 的字段中。 首先,我将所有数据写入 QStringList。 (.txt的每一行复制到QStringList的一个Element)
为了从 QStringList 中获取值,我试图找到带有“.indexOf()”的相应行,但没有用,因为我必须询问 的确切文本>整行。由于值不同,每次运行的行都不同,我的程序无法找到相应的行。
有没有像“.indexOf-Starting with certain text”这样的命令可以找到以start 为特定文本的行,例如“|时间 [ms]”
非常感谢
意大利
最佳答案
是的,有方法“.indexOf-从特定文本开始”。您可以使用正则表达式来匹配字符串的开头:
int QStringList::indexOf (const QRegExp& rx, int from = 0) const
这样使用:
int timeLineIndex = stringList.indexOf(QRegExp("^\| Time \[ms\].+"));
^
表示这段文字应该在字符串的开头
\
转义特殊字符
.+
表示任何文本都可以跟在这后面
编辑:
这是一个展示其工作原理的工作示例:
QStringList stringList;
stringList << "abc 5234 hjd";
stringList << "bnd|gf dfs aaa";
stringList << "das gf dfs aaa";
int index = stringList.indexOf(QRegExp("^bnd\|gf.+"));
qDebug() << index;
输出:1
编辑:
这是一个 ezee 用法的函数:
int indexOfLineStartingWith(const QStringList& list, const QString& textToFind)
{
return list.indexOf(QRegExp("^" + QRegExp::escape(textToFind) + ".+"));
}
int index = indexOfLineStartingWith(stringList, "bnd|gf"); //it's not needed to escape characters here
关于c++使用.indexOf在QStringList中查找以 "..."开头的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26032643/