目前,我們常用的配置文件格式有XML和ini, XML層次分明,但其缺點就是寫起來太繁雜,對一些關鍵字如<>之類的處理比較特殊。而ini呢,配置不夠靈活,只有簡單的段-鍵-值模式,對於一些多層結構的配置,或者一些列表類型的配置,就顯得力不從心了,往往需要編碼人員自己分割字符串。
Lua腳本非常簡潔清晰,是非常適合做配置文件的,無論是映射表型配置,還是列表型配置,還是簡單的鍵值配置,lua都可以完全勝任。而且lua格式清新簡潔,一看就懂。
所以,用lua作為程序的配置文件是非常明智的,但是,在C++中解釋lua腳本的配置文件,僅僅通過lua提供的原始API,就顯得非常吃力了,所以我封裝了這個lua腳本配置文件解釋器,用起來非常方便。
LConfig下載地址:http://www.kuaipan.cn/file/id_28924397125373532.htm
LConfig支持跨平台(Windows,Linux)
下面是一個配置文件的例子:
i = 13433 x = "wo shi shui" y = "沈璧君" tb = { x = 23, h = 232, } tb2 = {12,13,14,15,16}
可見,lua非常簡潔,並支持非常靈活強大的配置方式,絕對可以勝任一切的配置要求
下面是程序中讀取該配置文件的代碼:
int main() { CLConfig conf; CElement* root = conf.loadLFile("conf.lua"); // 隨時可以通過getRoot方法獲取root元素 //root = conf.getRoot(); // 獲取子元素x的字符值,如果x子元素不存在,則返回默認值 std::cout << "x=" << root->getStringElementDefalut("x", "x not found") << std::endl; // 獲取子元素y的值,這種方式需要先判斷獲取的y元素對象是否存在 CElement* yElem = root->getElement("y"); if (yElem) { std::cout << "y=" << yElem->getStringValueDefalut() << std::endl; // 獲取y的數字類型,如果y非數字,則返回默認值 std::cout << "y(int)=" << yElem->getIntegerValueDefault(100) << std::endl; } // 獲取一個沒有配置的元素,返回默認值 std::cout << "no=" << root->getStringElementDefalut("no", "hello world") << std::endl; CElement* tb = root->getElement("tb"); //獲取tb表中x字段的值 std::cout << "tb:x=" << tb->getElement("x")->getIntegerValueDefault() << std::endl; // 獲取tb表中h字段的值,如果該字段不存在,則默認為30 std::cout << "tb:h=" << tb->getIntegerElementDefault("h", 30) << std::endl; // 獲取tb2中key為1的字段的值,tb2是列表,默認key從1開始遞增 std::cout << "tb2:[1]=" << root->getElement("tb2")->getElement("1")->getIntegerValueDefault() << std::endl; // 獲取tb2中key為5的字段的值,tb2是列表,默認key從1開始遞增 std::cout << "tb2:[5]=" << root->getElement("tb2")->getElement("5")->getDoubleValueDefault() << std::endl; // 遍歷tb2列表中的所有值 ElementMap* elems = root->getElement("tb2")->getElementMap(); for (ElementMap::iterator it = elems->begin(); it != elems->end(); ++it) { // 如果有些值不是數字類型,則返回為默認值100. std::cout << "tb2 elem:" << it->second->getIntegerValueDefault(100) << std::endl; } /// 釋放資源,析構函數會自動調用 //conf.release(); getchar(); return 0; }
以下是輸出結果
可見,使用LConfig讀取lua配置,是如此的簡單!
那么,如何在我們的代碼中使用LConfig呢?
首先,下載LConfig的源代碼,LConfig的源代碼中自帶了lua5.1.5版本的代碼,不用動它們,直接將LConfig的代碼放入我們的工程的源代碼中,然后在我們的源程序中包含LConfig.h就可以了,使用方式參考上面的例子,夠詳細的了。
LConfig下載地址:http://www.kuaipan.cn/file/id_28924397125373532.htm