1. ホーム
  2. c++

C++で簡単な設定ファイルとパーサを作成する

2023-10-13 16:49:26

質問

私は以下のような簡単な設定ファイルを作ろうとしています。

url = http://mysite.com
file = main.exe
true = 0

プログラムの実行時に、以下のプログラム変数にコンフィギュレーション設定をロードしてほしい。

string url, file;
bool true_false;

いろいろ調べてみたところ これ のリンクが役に立ったようですが(nucleonさんの投稿)、どうもうまくいかず、私の方では複雑で理解できません。簡単な方法はないでしょうか?ファイルを読み込むには ifstream を使って読み込むことはできますが、私一人ではそこまでしかできません。ありがとうございます!

どのように解決するのですか?

一般に、このような典型的な設定ファイルを解析するには、2 段階に分けるのが最も簡単です。まず行を読み、次にそれらを 1 つずつ解析していきます。

C++では、行をストリームから読み込むには std::getline() . デフォルトでは、次の '\n' まで読みますが (これは消費されますが、返されません)、 他の区切り文字を渡すこともできますので、例えば = のように、数文字までの文字列を読み取るのに適しています。

簡単のために、以下は = ではない は空白で囲まれていません。もしこれらの位置で空白を許容したいのであれば、戦略的に is >> std::ws を戦略的に配置し、キーから末尾の空白を削除する必要があります。しかし、構文に少し追加された柔軟性は、設定ファイル リーダーにとって手間に見合うものではない、と私は考えています。

const char config[] = "url=http://example.com\n"
                      "file=main.exe\n"
                      "true=0";

std::istringstream is_file(config);

std::string line;
while( std::getline(is_file, line) )
{
  std::istringstream is_line(line);
  std::string key;
  if( std::getline(is_line, key, '=') )
  {
    std::string value;
    if( std::getline(is_line, value) ) 
      store_line(key, value);
  }
}

(エラー処理の追加は読者の課題として残されています)