一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

简介
simpleini是C++对ini格式数据的解析/生成库。我比较推荐,理由可看介绍https://github.com/brofield/simpleini,其中我比较看重以下几个优点:

  • simpleini库仅由SimpleIni.h一个文件组成。
  • simpleini库支持char和wchar_t字符编程。
  • 可选支持多行的value和重复的key名称。
  • 可选支持不区分大小写的section和key。
  • 支持key/value可以没有对应的section。
  • 支持section和key可以按照加载时的顺序获取。
  • simpleini库加载或输出数据时,支持UTF-8字符集和MBCS(本地语言)字符集。
  • simpleini库解析ini数据前,若使用wchar_t接口,自动将ini数据的字符集转换为当前字符集。

缺点:

  • simpleini库加载ini格式数据前,不支持自动识别字符集,必须在加载数据前显式指明数据源的字符集。
  • simpleini库加载和输出数据时,仅支持UTF-8和MBCS(本地语言)字符集,而其他字符集暂不支持。

注意事项
  解析ini数据时,注意字符集的自动转换。如果当前使用char接口,则输入数据没有发生字符集转换,字符集保持不变(加载的数据是UTF-8/ MBCS字符集,则保存相应字符集的数据)。如果当前使用wchar_t接口,则输入数据的字符集(UTF-8/MBCS)自动转换为UTF-16/32字符集。
  当使用wchar_t接口时,由于加载数据和输出数据时都会自动转换字符集,因此输出数据时,字符集被还原回来了,即输出数据的字符集始终与原始数据的字符集保持一致。

ini数据加载和输出

API

  重点了解ini数据加载和输出,以及字符集自动转换。API的熟悉只需多用即可,simpleini的API也是类似DOM,因此也简单易用。 

Demo

 1 // 不区分大小写
 2 CSimpleIni ini;
 3 CSimpleIni::TNamesDepend sections;
 4 ini.GetAllSections(sections);
 5 sections.sort(typename CSimpleIni::Entry::LoadOrder());        // 按照加载时的顺序排序
 6 for (const auto &it : sections)
 7 {
 8     const CSimpleIni::TKeyVal *pKeyVal = ini.GetSection(it.pItem);
 9     if (nullptr != pKeyVal)
10     {
11         for (const auto& it : *pKeyVal)
12         {
13             cout << it.first.pItem << _T(" = ") << it.second << endl;
14         }
15     }
16 }

 

posted on 2024-01-30 17:09  一杯清酒邀明月  阅读(185)  评论(0编辑  收藏  举报