gpt4 book ai didi

c++ - QTextStream 行为搜索不符合预期的字符串

转载 作者:可可西里 更新时间:2023-11-01 18:17:27 30 4
gpt4 key购买 nike

我有这几行代码:

QFile file("h:/test.txt");
file.open(QFile::ReadOnly | QFile::Text);
QTextStream in(&file);

bool found = false;
uint pos = 0;

do {
QString temp = in.readLine();
int p = temp.indexOf("something");
if (p < 0) {
pos += temp.length() + 1;
} else {
pos += p;
found = true;
}
} while (!found && !in.atEnd());

in.seek(0);
QString text = in.read(pos);
cout << text.toStdString() << endl;

这个想法是在一个文本文件中搜索一个特定的字符序列,当找到时,从头加载文件到搜索到的文本出现的位置。我用于测试的输入是:

this is line one, the first line
this is line two, it is second
this is the third line
and this is line 4
line 5 goes here
and finally, there is line number 6

奇怪的部分来了——如果搜索到的字符串在除最后一行以外的任何一行上,我就会得到预期的行为。它工作得很好。

但是 如果我搜索最后第 6 行的字符串,结果总是短 5 个字符。如果是第 7 行,结果会短 6 个字符,依此类推,当搜索的字符串在 last 行时,结果总是 lineNumber - 1 个字符更短。

那么,这是一个错误还是我遗漏了一些明显的东西?

编辑:澄清一下,我不是在寻求替代方法,而是在问我为什么会出现这种行为。

最佳答案

当你在最后一行搜索时,你读取了所有的输入流 -in.atEnd() 返回真。看起来它以某种方式破坏了文件或文本流,或者将它们设置为不同步,因此搜索不再有效。

如果你更换

in.seek(0);
QString text = in.read(pos);
cout << text.toStdString() << endl;

通过

QString text;
if(in.atEnd())
{
file.close();
file.open(QFile::ReadOnly | QFile::Text);
QTextStream in1(&file);
text = in1.read(pos);
}

else
{
in.seek(0);
text = in.read(pos);
}
cout << text.toStdString().c_str() << endl;

它将按预期工作。附言可能有一些更干净的解决方案然后重新打开文件,但问题肯定来自到达流和文件的末尾并在之后尝试对它们进行操作......

关于c++ - QTextStream 行为搜索不符合预期的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15850133/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com