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);
}
}
(エラー処理の追加は読者の課題として残されています)
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] ファイルへの追記はどのように行うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件