CLX C++ Libraries
Home >> ini

Declaration

template <
    class Type,
    class CharT = char,
    class Traits = std::char_traits<CharT>
>
class basic_ini : public std::map<...>;

typedef basic_ini<std::string> ini;

Overview

Windows で用いられていた INI ファイルを扱うためのクラスです. 指定したファイルを読み込み,["セクション名"]["キー名"] という形で対応する値にアクセスすることができます.また,insert() メソッドを用いて新たなセクション名をオブジェクトに挿入することも可能です (挿入した時点では,そのセクションに属するキーは存在しない).

二次元連想配列 (map) を用いて実装しているため,[] 演算子でアクセスした際に, 対応するセクション and/or キーが存在しない場合は,新たに作成されることになります.

Example

// example_ini.cpp
#include <iostream>
#include "clx/ini.h"

int main(int argc, char* argv[]) {
    if (argc < 2) std::exit(-1);
    
    try {
        clx::ini ini(argv[1]);
        
        ini.insert("hoge");
        ini["hoge"]["fuga"] = "foo";
        for (clx::ini::iterator p = ini.begin(); p != ini.end(); p++) {
            std::cout << "***" << p->first << "***" << std::endl;
            for (clx::ini::mapped_type::iterator q = p->second.begin();
                q != p->second.end(); q++) {
                std::cout << '<' << q->first << "><"
                    << q->second << '>' << std::endl;
            }
        }
        
        if (ini.exist("Settings", "AnonymousRecipient")) {
            std::cout << "found!" << std::endl;
        }
    }
    catch (clx::syntax_error& e) {
        std::cerr << argv[1] << ':' << e.line() << ": error: "
            << e.what() << std::endl;
        std::exit(-1);
    }
    catch (std::runtime_error& e) {
        std::cerr << e.what() << std::endl;
        std::exit(-1);
    }
    
    return 0;
}

Result (test.ini)
***Debug***
<LogFile><0>
***Output***
<Charset><euc-jp>
***Settings***
<AnonymousRecipient><0>
<CmdName><gpg.exe>
<DefUserID><>
<EnableBccUser><0>
<EnableCcUser><0>
<EnableDefUser><0>
<EnableFromUser><0>
<EnableTextModeSig><0>
<OpenPGP><0>
<PGPCompatible><1>
<PGPMIME><1>
<RFC1991><0>
<ShowPassphrase><0>
<UseMD5><0>
***hoge***
<fuga><foo>
found!

Template Parameter

Type
値の型を指定します.
CharT
文字の型を指定します.デフォルト値は,char.
Traits
文字列を扱うためのtraitsを指定します.デフォルト値は, std::char_traits<CharT>.

Related Types

typedef CharT char_type;
typedef std::basic_string<CharT, Traits> string_type;
typedef std::map<string_type, ini_container<Type, CharT, Traits> > container;
typedef std::basic_istream<CharT, Traits> istream;
typedef typename container::key_type key_type;
typedef typename container::mapped_type mapped_type;
typedef typename container::value_type value_type;
typedef typename container::iterator iterator;
typedef typename container::const_iterator const_iterator;

Construction and Member Functions

basic_ini();
explicit basic_ini(istream& sin);
explicit basic_ini(const string_type& path);
explicit basic_ini(const char_type* path);

void read(istream& sin);
void read(const string_type& path);
void read(const char_type* path);

void insert(const string_type& section);
void insert(const char_type* section);

bool exist(const string_type& section);
bool exist(const char_type* section);
bool exist(const string_type& section, const string_type& entry);
bool exist(const char_type* section, const char_type* entry);