CLX C++ Libraries
Home >> ini

Declaration

template <
    class Type,
    class CharT = char,
    class Traits = std::char_traits<CharT>
>
class basic_ini : public map_wrapper<std::basic_string<CharT, Traits>,
    ini_container<Type, CharT, Traits> >;

typedef basic_ini<std::basic_string<char> > ini;
#ifdef CLX_USE_WCHAR
typedef basic_ini<std::basic_string<wchar_t> > wini;
#endif

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::sub_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 string_type key_type;
typedef Type value_type;

typedef ini_container<Type, CharT, Traits> subcontainer;
typedef typename subcontainer::iterator sub_iterator;
typedef typename subcontainer::const_iterator const_sub_iterator;
typedef std::map<string_type, subcontaine> container;

Construction and Member Functions

basic_ini();

template <class Ch, classTr>
explicit basic_ini(std::basic_istream<Ch, Tr>& sin);

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

virtual ~basic_ini();

コンストラクタは,指定された引数で read() メソッドを実行します. read() メソッドに関しては後述します.

template <class Ch, class Tr>
basic_ini& read(std::basic_istream<Ch, Tr>& sin);

basic_ini& read(const string_type& path);
basic_ini& read(const char_type* path);

read() メソッドには入力ストリーム,または INI ファイルのパスを指定します. read() メソッドによって解析された結果へのアクセスは,std::map で提供されている 各メソッドを利用して行います.std::map(の継承)に関する詳細は, container_wrapper を参照して下さい.

template <class Ch, class Tr>
basic_ini& write(std::basic_istream<Ch, Tr>& sin);

basic_ini& write(const string_type& path);
basic_ini& write(const char_type* path);

write() メソッドには出力ストリーム,または出力ファイルのパスを指定します. 指定されたパスのファイルが既に存在している場合には,上書きします.

bool insert(const key_type& section);

insert() メソッドは,新たなセクションを作成する時に使用します.引数 section を指定して insert() メソッドを呼ぶと ini はキーを一つも持たない空のセクションを作成し, INI 情報を管理しているコンテナへ追加します.

Related Pages

  1. CLX C++ Libraries - container_wrapper