c++在包含多键时 boost 解析ini文件

标签 c++ boost ini

我需要使用带有 boost 库的 C++ 解析 ini 文件。该文件包含多键。例如,

[section_1]
key_1=value_1
key_1=value_2
...
key_n=value_n
[section_2]
key1=value_1
key1=value_2
...
key_n=value_1
key_n=value_2
[]
...
[section_n]
...

我尝试使用 boost 库的功能:函数 boost::property_tree::ini_parser::read_ini(),但它不能在 ini 文件中包含 multikey 并返回异常。所以我尝试使用函数 boost::program_options::parse_config_file(),但这不是我需要的。

我应该使用什么功能来解析 ini 文件以及我可以为每个部分获取具有相关键值的自己的结构?

最佳答案

您的输入根本不是 INI 文件,因为 INI 文件不允许重复值。您可以编写自己的解析器,例如使用我在这里写的代码:¹

如果替换section_t map

typedef std::map<textnode_t, textnode_t>    section_t;

使用 multimap :

typedef std::multimap<textnode_t, textnode_t>    section_t;

你可以解析重复的键:

[section_1]
key_1=value_1
key_1=value_2
key_n=value_n
[section_2]
key1=value_1
key2=value_2
key_n=value_1
key_n=value_2
[section_n]

See full code here: https://gist.github.com/sehe/068b1ae81547b98a3cec02a530f220df

¹ 或 Learning Boost.Spirit: parsing INIhttp://coliru.stacked-crooked.com/view?id=cd1d516ae0b19bd6f9af1e3f1b132211-0d2159870a1c6cb0cd1457b292b97230可能还有其他人

关于c++在包含多键时 boost 解析ini文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41705075/

相关文章:

c++ - 在 C++ 中进行类型转换

c++ - 元编程中有哪些数学运算符可用

c++ - boost 线程和类

c++ - 获取 URL token 的正则表达式是什么?

php ini 与 json 并停止编译器 hack

c++ - boost::asio strand 包裹的线程不能立即工作

c++ - 程序不读入节点并将其添加到 2 个双向链表 C++

c++ - 使用 boost::pool 管理 std::vector 中的内存分配

php - 如何使用 PHP 读取和写入 ini 文件

java - 将ini文件放入字符串中