LConfig:利用Lua腳本做程序的配置文件


    目前,我們常用的配置文件格式有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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM