0

我(再次)被 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(){
    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();那个函数不存在!!!

如何在文本文件中搜索 Qt 中的特定内容?

4

1 回答 1

5

如果名称可以包含空格,这种文件格式会给您带来很多麻烦,因为您无法知道名字或最后一个名称是否包含两个部分。考虑使用其他字符作为分隔符,例如:

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());
于 2012-04-05T21:05:30.690 回答