如何在QFile中找到包含文本的特定字符?
例如我在我的文件中写了'$ 5000'。想要找到“$”符号,这样我才能意识到我已经达到了这个数字。
我尝试使用QString QTextStream :: read(qint64 maxlen)将1作为maxlen:
QFile myfile("myfile.txt");
myfile.open(QIODevice::ReadWrite | QIODevice::Text);
QTextStream myfile_stream(&myfile);
while(! myfile_stream.atEnd())
{
if( myfile_stream.read(1) == '$')
{
qDebug()<<"found";
break;
}
}
我得到“错误:从'char'无效转换为'const char *”
我也尝试使用operator [],但显然它不能用于文件。
答案 0 :(得分:1)
一次读一行并搜索您在
中阅读的文字QTextStream stream(&myFile);
QString line;
do
{
line = stream.readLine();
if(line.contains("$"))
{
qDebug()<<"found";
break;
}
} while (!line.isNull());
答案 1 :(得分:0)
您发布的错误消息与代码中的问题不符。可能是错误是由其他原因引起的。
QTextStream::read
返回QString
。您无法直接比较QString
和const char*
,但operator[]
可以提供帮助:
QString s = stream.read(1);
if (s.count() == 1) {
if (s[0] == '$') {
//...
}
}
然而,通过太小的部分读取文件将非常慢。如果您的文件足够小,您可以一次阅读:
QString s = stream.readAll();
int index = s.indexOf('$');
如果您的文件很大,最好以小块(例如1024字节)读取文件,并使用indexOf
结果和已读取块的计数来计算找到的字符的索引。
答案 2 :(得分:0)
可以使用
读取单个字符QTextStream myfile_stream(&myfile);
QChar c;
while (!myfile_stream.atEnd())
myfile_stream >> c;
if (c == '$') {
...
}
答案 3 :(得分:0)
myfile_stream.read(1)
- 这不是一个好习惯,你不应该一次从一个字节读取文件。如果存在文件太大而无法放入内存的风险,请读取整个文件,或逐行缓冲。
你得到的错误是因为你将QString
的等式与字符文字进行比较 - 不用说不能按预期工作。即使字符串中只有一个字符,字符串也是字符串。建议 - 使用[]
运算符或更好的关闭 - QString::at() const
,保证不会创建额外的副本。您不是在QFile
上使用它,也不是在QTextStream
上使用它,而是在针对文件的文本流的QString
方法返回的read()
上使用它
在内存中显示文本后,您可以使用常规QString
方法(如indexOf()
)来搜索包含字符的索引。
答案 4 :(得分:0)
想要找到“$”符号,这样我就会意识到我已经达到了 号。
听起来你正在寻找'$'符号,因为你对它后面的美元价值更感兴趣。在这种情况下,我建议逐行阅读文件并通过QRegExp
运行它们以提取您正在寻找的任何值。
QRegExp dollarFind("\\$(\\d+)");
while(!myfile_stream.atEnd()){
QString line = myfile_stream.readLine();
if (dollarFind.exactMatch(line)){
QStringList dollars = dollarFind.capturedTexts();
qDebug() << "Dollar values found: " << dollars.join(", ");
}
}