2016-08-23 150 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++細節錯誤...

相關問題