c++使用.indexOf在QStringList中查找以 "..."开头的文本

标签 c++ qt indexof

我有一个关于 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/

相关文章:

c++ - 为什么 Ranges 库中的 std::views::take_while 需要 const 谓词?

mysql - 如何从 mySql 创建和编辑数据库文件 .db?

c# - 如何找到某个子字符串后特定类型字符首次出现的索引?

javascript - 如何检查一个对象是否是 JavaScript 中一组特定原型(prototype)的实例?

c# - 奇怪的 string.IndexOf 行为

c++ - 传递参数时如何更新C++可选参数?

c++ - COleBusyDialog 自定义

c++ - Ubuntu 或 Windows 中的代码块。有什么不同吗?

c++ - 发布构建调试问题

c++ - 测试项目中Makefile中的Qtcreator错误