Linux中的qt编程如何分行提取txt文档中的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中的qt编程如何分行提取txt文档中的数据相关的知识,希望对你有一定的参考价值。
提取txt文档中的数据编程如下,只不过这个是每行都提取,我想提取指定行的数据,部分程序如下:
....
while(stream.atEnd()==0)
rowdata=stream.readLine();
data1=rowdata.mid(54,16);
.....
上面的程序把每一行的54列后面的16位数据都提取出来了,我想指定一行提取,比如第3行,那该怎么编程呢,求助高手~
我用的是Linux系统的Fedora14
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
while (!in.atEnd())
QString line = in.readLine();
process_line(line);
如果要指定某行 加个if判断就行了追问
额,我是菜鸟,可以加点解释吗,比如in.txt是要打开的txt文件,我要打开第2行,是让line变成2吗
追答line是不能变成2的 我的意思是你要读第二行的话 就在行数为2的时候处理 就是说不管你处理哪一行 要把文件从头遍历 直到你所在的行。
QTextStream in(&file);
int flag = 1; //作为判断的标志
while (!in.atEnd())
QString line = in.readLine();
flag++;
if(flag == 2)
"处理进程";
如何从 Qt 中的 txt 文件中删除一行?
【中文标题】如何从 Qt 中的 txt 文件中删除一行?【英文标题】:How to delete a line from a txt file in Qt? 【发布时间】:2021-11-07 21:51:00 【问题描述】:我的 txt 文件 (CopyBook.txt) 包含例如 10 行。我想删除第三个。
我有这个代码:
QString fname = "C://Users//Tomahawk//Desktop//copy//CopyBook.txt";
QFile file(fname);
if (file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
QTextStream edit(&file);
QString line;
int reachForLine = 0;
int neededLine = 3;
while (reachForPage != pageCounter)
line = edit.readLine();
reachForPage++;
所以你可以看到我使用“while”来获取我想要删除的行。但我还没有在 Qt 中找到任何允许我这样做的方法。将来我想使用删除行的能力将它们替换为其他行。那么如何删除呢?
【问题讨论】:
通常最好将您要保留的所有行复制到一个临时文件(与原始文件在同一目录中),然后将临时文件重命名为原始文件名。另一种选择是将该行标记为已删除,并在以后读取文件时跳过它。 【参考方案1】:一种方法是将所有行读入QStringList
,修改QStringList
,然后转身将其内容再次写回文件,如下所示:
int main(int argc, char ** argv)
const QString fname = "C:/Users/Tomahawk/Desktop/copy/CopyBook.txt";
QStringList lines;
// Read lines of text from the file into the QStringList
QFile inputFile(fname);
if (inputFile.open(QIODevice::ReadOnly | QIODevice::Text))
QTextStream edit(&inputFile);
while (!edit.atEnd()) lines.push_back(edit.readLine());
inputFile.close();
// Delete the third line from the QStringList
if (lines.length() > 2) lines.removeAt(2); // 0==first line, 1==second line, etc
// Write the text in the QStringList back to the file
QFile outputFile(fname);
if (outputFile.open(QIODevice::WriteOnly | QIODevice::Text))
QTextStream edit(&outputFile);
for (int i=0; i<lines.size(); i++) edit << lines[i] << Qt::endl;
outputFile.close();
return 0;
您还可以在将 QStringList
对象写回文件之前对其执行任何替换/插入操作。
请注意,这种方法确实会占用与文件大小成正比的 RAM,因此对于非常大的文件(例如千兆字节长),您可能希望使用 create-a-second-file-and-then-rename 方法而是由@TedLyngmo 在他的评论中提出。对于小文件,OTOH,在 RAM 中缓冲更容易且不易出错。
【讨论】:
太棒了,兄弟,正是我需要的,谢谢!以上是关于Linux中的qt编程如何分行提取txt文档中的数据的主要内容,如果未能解决你的问题,请参考以下文章