我需要使用带有 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 INI和 http://coliru.stacked-crooked.com/view?id=cd1d516ae0b19bd6f9af1e3f1b132211-0d2159870a1c6cb0cd1457b292b97230可能还有其他人
关于c++在包含多键时 boost 解析ini文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41705075/