[英]Reading, writing and searching through text files with Qt
我被 Qt(再次)困住了,我正在尝试从文本文件中读取文本。 这是文本文件包含的内容:
1001 James Bark
1002 Jeremy Parker
1003 Seinfeld Parker
1004 Sigfried FonStein
1005 Rabbun Hassan
1006 Jenniffer Jones
1007 Agent Smith
1008 Mister Anderson
不要问名字从何而来。 我需要能够索引这个文件并将其添加到表中。 截至目前,该表如下所示:
|--------------------------------|
| |First Name|Last Name |
|--------------------------------|
|1001 | | |
|--------------------------------|
| | | |
|--------------------------------|
| | | |
|--------------------------------|
| | | |
|--------------------------------|
但它需要看起来像这样
|--------------------------------|
| |First Name|Last Name |
|--------------------------------|
|1001 |James |Bark |
|--------------------------------|
|1002 |Jeremy |Parker |
|--------------------------------|
|1003 |Seinfeld |FonStein |
|--------------------------------|
|1004 |Rabbun |Hassan |
|--------------------------------|
桌子部分和放入物品不是问题。 问题在于读取格式类似于顶部示例的文本文件。 另外,我不需要像那样格式化它。 我可以有 3 个不同的文本文件,这些文件中的 ID、Fname 和 Lname 是分开的。 这会很麻烦,但如果我必须这样做,我会的。
所以我的问题是我到底如何索引这个文件并获取这些值?
这是一个 function:
Function(){
QString fileName = "C:\\Users\\Gabe\\SeniorProj\\Students.txt";
QFile mFile(fileName);
if(!mFile.open(QFile::ReadOnly | QFile::Text)){
qDebug() << "Could not open file for reading";
return;
}
QTextStream in(&mFile);
QString mText = in.readAll();
mFile.flush();
mFile.close();
}
这段代码是我从某处的教程中获得的。 一切正常,我检查了我是否可以访问该文件,一切都很好。 但是如何处理它……我有一个等于所有文本的字符串。 那不是很有用。 所以我尝试了我在 c++ 中使用的东西,比如mFile.nextInt();
那么 function 不存在!!!
如何在文本文件中搜索 Qt 中的特定内容?
如果名称可以包含空格,该文件格式会给您带来很多麻烦,因为您无法知道名字或姓氏是否包含两个部分。 考虑使用其他字符作为分隔符,例如:
1001;James;Bark
1002;Jeremy;Parker
1003;Seinfeld;Parker
然后一次读取一行(参见 QTextStream 的文档)并将 QString 拆分为 QStringList:
QTextStream stream(stdin);
QString line;
do {
line = stream.readLine();
QStringList parts = line.split(";", QString::KeepEmptyParts);
if (parts.length() == 3) {
QString id = parts[0];
QString firstName = parts[1];
QString lastName = parts[2];
}
} while (!line.isNull());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.