Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

parse_config_file

タグ: C++ Boost

コマンドライン引数解析ライブラリ Boost.Program options には、コマンドライン引数の他に、 config file を解析するパーサが付いている。
しかしこの config file 、文中に何度か出てくる割に、書式の説明がない。
説明がないということは、もしかしたらこれはとんでもなく常識的なこと(説明するまでもなく一意に定まること)なのかもしれないのだが、どうも「これに相違ない」というものを発見できなかったので、テストコードを参考に書式を推測してみることにした。

参考にするのは Boost 1.34.1 の parsers_test.cpp の test_config_file() 。
見易くするため、 config file の中身に相当するリテラルを分けて記述する。

まずは config file 。

 gv1 = 0#asd
plug3 = 7
b = true
[m1]
v1 = 1

v2 = 2

そして test_config_file() 。

options_description desc;
desc.add_options()
    ("gv1", new untyped_value)
    ("gv2", new untyped_value)
    ("plug*", new untyped_value)
    ("m1.v1", new untyped_value)
    ("m1.v2", new untyped_value)
    ("b", bool_switch())
;

const char content1[] = "config file リテラル"

stringstream ss(content1);
vector<option> a1 = parse_config_file(ss, desc).options;
BOOST_REQUIRE(a1.size() == 5);
check_value(a1[0], "gv1", "0");
check_value(a1[1], "plug3", "7");
check_value(a1[2], "b", "true");
check_value(a1[3], "m1.v1", "1");
check_value(a1[4], "m1.v2", "2");

このテスト内容から推測できるのは、大体こんなところか。

  • 改行区切りである
  • name 前後、 value 前のスペースは無視される(それ以外のスペースやタブについては不明)
  • "#" 以降の文字は無視される
  • 空行は無視される
  • "[section name]" はセクション(Windowsの初期化ファイルのあれ)の開始を示す
  • セクション内の name は "section name.key name" という形になる

当然ながら、これはあくまでも「現版のテスト内容から推測したもの」であって、正式な仕様であることを保証するものではない。

それにしても

("plug*", new untyped_value)

オプション名定義でワイルドカードを使えるとは、知らなかった。
これもドキュメントにはないようだけど、使っていいのかな。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/76-c1e0271e
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。