2010-12-03 28 views
0

我目前使用SimpleINI,我不知道如果我可以用這個做,但我的配置文件是要這個樣子哪個C++ INI(或任何其他格式)加載庫支持多個鍵?

name = someone 
service = something 
match = blahblahblah 
match = something 
match = some more junk 

我事先知道哪些鍵支持多個值和我希望這些值被存儲在一個數組或其他東西,所以我可以稍後循環(順序無關緊要)。

如果不是SimpleIni,那麼哪個其他庫支持這個?我是C++的初學者,所以我正在尋找一些易於使用的東西。我提高了庫,但不確定是否應該使用它(看起來很複雜)。

我的應用程序是特定於Windows的,因此在這種情況下我不需要跨平臺解決方案。

我已經看到這個問題 - What is the easiest way to parse an INI File in C++?但不知道我可以用它來完成這個問題。

有什麼建議嗎?

回答

0

你沒有選擇將名稱更改爲類似match1,match2,match3等的名稱嗎?這似乎是最直接的方式。

除此之外,我一直都是這樣做的。我只寫了幾行代碼來自己解析文本文件。這不是一項複雜的任務。但是,如果您希望使用常規INI文件,則需要查看更改INI文件中的值名稱。

+0

我已經設置爲使用--match命令行選項,並希望在同一個命令用作conf文件中的鍵。我認爲這樣更好。格式不一定是ini。它可以是任何東西。 – codefrog 2010-12-03 05:59:54

+0

INI文件中的重複鍵很常見。想想他們像一個數組 – 2010-12-03 06:12:16

0

鑑於你在windows上,你可能根本不需要庫。

只要瀏覽文檔,您永遠不會知道它,但WINAPI中的GetPrivateProfileString()可能完全符合您的需要。

0

我的Qt解決方案適用於其他SO線程。這是更好,因爲

  • 跨平臺
  • 方便轉換爲不是字符串
  • 簡單

其他值如果你有一個這樣的ini文件(可從您的列表自動生成使用Qt API的對象)

[Matches] 
1\match=1 
2\match=2 
3\match=3 
size=3 

這是讀回它們的代碼

QSettings settings("test.ini", QSettings::IniFormat); 
int size = settings.beginReadArray("Matches"); 
for (int i = 0; i < size; ++i) { 
    settings.setArrayIndex(i); 
    std::cout << settings.value("match").toInt() << std::endl; 
} 
settings.endArray(); 

當然,另一個明顯的選擇將是用逗號分隔的字符串作爲你的價值和使用QString ::分裂()

相關問題