2016-08-23 50 views
-2

file.txt的数据如下:如何使用Qt获取文件内部文本的值?

Student_ID=0001 
Student_Name=joseph 
Student_GradeLevel=2 

我如何获得的价值,让说,我想要得到的Student_ID使用Qt。 谢谢。

+0

你需要使用Qt类,或者你可以使用'std :: ifstream'吗? –

+0

@ThomasMatthews我需要使用Qt类,那么我该怎么做?谢谢 – Noooobz2016

+0

请[编辑]你的问题,以显示[你到目前为止尝试过](http://whathaveyoutried.com)。您应该包含您遇到问题的代码[mcve],然后我们可以尝试帮助解决特定问题。你还应该阅读[问]。 –

回答

2

看看这个功能,它可以用于在你的输入文件中找到你想要的任何值,其中所有的行都是你上面发布的格式(key=value)。如果找不到密钥,则返回一个空的QString()对象。

QString findValueInFile(QString key, QString filename) { 
    QFile file(filename); 

    if(file.open(QIODevice::ReadOnly)) { 
     QTextStream txtStr(&file); 
     QStringList fileContent = txtStr.readAll().split('\n'); 

     for(auto &&line : fileContent) { 
      if(line.contains(key)) return line.split(QChar('='))[1]; 
     } 

     file.close(); 
    } 

return QString(); // not found 
} 

现在你的地方叫它,例如:

qDebug() << findValueInFile("Student_ID", "file.txt"); 
qDebug() << findValueInFile("Student_Name", "file.txt"); 

此功能可如果您更换=标志与其他分隔符例如很容易地修改=>或别的。然而,对于key=value格式有一个特殊的QSettings类,它可以让你阅读这些值更容易(由塞巴斯蒂安提到):

QSettings file("file.txt", QSettings::IniFormat); 
qDebug() << file.value("Student_Name").toString(); // et voila! 
+0

Qt中的'not stream,atEnd()'循环与其他文件接口相比是否更具惯用?通常这些是反模式,因为当数据流处于错误状态时它们会变成无限循环,或者因为它们在最后有一个无关的迭代。 –

+0

@SebastianRedl我怀疑这一点。我同意有这样的方式来阅读这样的文件。在这种情况下,使用'.readAll()'整个文件并遍历分割线,而不是像这样从流中读取它们会更好。 – 5208760

+0

@ Noooobz2016,简化了第一个选项,使它对您更安全一些(谢谢,Sebastian Redl)。 – 5208760

0

你或许可以也使用QSettings,因为他们能够阅读ini文件。 有一些注意事项,虽然关于反斜线这可能是对你很重要(虽然他们是不是你张贴的例子):http://doc.qt.io/qt-4.8/qsettings.html#Format-enum

QSettings iniFile("myfile.txt", QSettings::IniFormat); 
// now get the values by their key 
auto studentId = iniFile.value("Student_ID").toString().toInt(); 

我更多的是PyQt用户的,所以:道歉,如果我有一些C++细节错误...

相关问题