Intuitive, fast, lightweight, header, portable INI parser for ANSI C++.
Statement | Return Type |
---|---|
ini(filename, doParse, parseFlags) | constructor |
ini(ini) | copy constructor |
ini.parse(parseFlags) | bool |
ini.save(filename, saveFlags) | bool |
ini.set(section, key, value) | bool |
ini.get(section, key, def) | string |
ini.getAs<type>(section, key, def = type()) | type |
ini.create(section) | bool |
ini.select(section) | bool |
ini.set(key, value) | bool |
ini.get(key, def) | string |
ini.getAs<type>(key, def = type()) | type |
ini.clear() | bool |
ini[section][key] | string& |
ini[section] | keys_t& |
Flag | Effect |
---|---|
PARSE_COMMENTS_ALL | Parses comments // and # |
PARSE_COMMENTS_SLASH | Parses comment // |
PARSE_COMMENTS_HASH | Parses comment # |
SAVE_PRUNE | Removes all empty sections/keys |
SAVE_PADDING_SECTIONS | Appends a blank line under each section |
SAVE_SPACE_SECTIONS | '[ Section ]' instead of '[Section]' |
SAVE_SPACE_KEYS | 'key = value' instead of 'key=value' |
SAVE_TAB_KEYS | ' key=value' instead of 'key=value' |
SAVE_SEMICOLON_KEYS | 'key=value;' instead of 'key=value' |
Requires C++11: -std=c++11 or -std=c++14 or -std=c++20 or ...
#include "INI.h"
//#define FINI_WIDE_SUPPORT
...
// Set global parsing/saving options
INI::PARSE_FLAGS = INI::PARSE_COMMENTS_ALL | INI::PARSE_COMMENTS_SLASH | INI::PARSE_COMMENTS_HASH;
INI::SAVE_FLAGS = INI::SAVE_PRUNE | INI::SAVE_PADDING_SECTIONS | INI::SAVE_SPACE_SECTIONS | INI::SAVE_SPACE_KEYS | INI::SAVE_TAB_KEYS | INI::SAVE_SEMICOLON_KEYS;
INI ini("file.ini", true); // Assign ini file and parse
ini.create("Section 0");
ini.select("Section 0");
ini.set("Key2", "Value");
ini.get("Key1", "DefaultValue");
ini.set("Section 0", "Key1", std::to_string(11.12));
cout << ini.getAs<float>("Section 2", "Key1") << endl; // Return as float
ini["Section 0"]["Key1"] = "Changed";
// Save with formatting
ini.save("test.ini");
// Loop through sections, keys and values
for(auto i: ini.sections) {
cout << "[" << i.first << "]" << endl;
//for(auto j = i.second->begin(); j != i.second->end(); j++)
for(auto j: *i.second) {
cout << " " << j.first << "=" << j.second << endl;
}
}
Please see the example .cpp file and Code::Blocks .cbp project for a compilable GCC and VSC++ example. Further examples include enabling wide char support.