2012-10-31 26 views
1

用例正在遍歷用YAML編寫的配置文件。我需要檢查每個鍵並相應地解析其值。我喜歡使用隨機訪問方法(如doc["key"] >> value)的想法,但我真正需要做的是在配置文件中警告用戶無法識別的密鑰,以防他們拼寫錯誤的密鑰。我不知道如何做到這一點沒有迭代通過該文件。使用YAML-cpp,如何識別未知密鑰?

我知道我可以使用YAML::Iterator做到這一點,像這樣

for (YAML::Iterator it=doc.begin(); it<doc.end(); ++it) 
{ 
    std::string key; 
    it.first() >> key; 
    if (key=="parameter") { /* do stuff, possibly iterating over nested keys */ } 
    } else if (/* */) { 
    } else { 
     std::cerr << "Warning: bad parameter" << std::endl; 
    } 
} 

但有一個簡單的方法來做到這一點?我的方式似乎完全繞過了內置於YAML-cpp中的任何錯誤檢查,並且它似乎取消了隨機訪問密鑰的所有簡單性。

回答

2

如果你擔心,因爲用戶拼錯它的關鍵不在那裏,你可以用FindValue

if(const YAML::Node *pNode = doc.FindValue("parameter")) { 
    // do something 
} else { 
    std::cerr << "Parameter missing\n"; 
} 

如果你真正希望得到您的具體名單之外的地圖中所有的鍵,那麼你將不得不迭代,因爲你在做什麼。

+0

是的,我想我必須迭代,然後。我也在考慮「創意」用戶在左欄中輸入內容的情況。沒有反饋,用戶可能會問爲什麼程序沒有問題就接受了他的輸入,卻沒有做到他想做的。 – Fadecomic