INI に似た構成ファイルを作成していますが、C/C++ でそれを解析する最良の方法を知りたいです。私は POSIX で書いているので、; の代わりに # を使用します。どちらでも構いません。私が知りたいのは、ある種のチュートリアル、物事の解析に関する記事などがありますか。
6 に答える
構文解析に関するチュートリアルや記事はたくさんありますが、扱っている内容は非常に些細なものであり、そのほとんどはやり過ぎかもしれません。
これまでにどれだけの頻度でこれが行われてきたかを考えると、まず、あなたが望むものをほぼ実装している既存のコードのいくつかを調べることから始めます。
libiniなど、ほとんどまたはまったく変更せずに使用できるオープン ソース ライブラリがすでにたくさんあります。
Configuratorを試してください。これは、構成ファイルの解析用の使いやすく柔軟なC ++ライブラリです(最も単純なINIから、任意のネストとセマンティックチェックを備えた複雑なファイルまで)。ヘッダーのみおよびクロスプラットフォーム。BoostC++ライブラリを使用します。
C ++の基本的なものでよくあるように、ブーストにはiniファイルを読み取ることができるライブラリがあります。実際、達成したい内容に応じて、2 つのライブラリがあります。
- boost プログラム オプションを使用すると、コマンド ライン、ini、または混合ソースからプログラム オプションを管理できます。
- ブーストプロパティツリーがあなたのために働きます: http://www.boost.org/doc/libs/1_44_0/doc/html/boost_propertytree/parsers.html
実際に必要な複雑さに応じて、ループで fgets() を使用し、各行を手動で解析するだけで済む場合があります (たとえば、strstr()、strchr()、strcmp() などを使用)。いくつかの値を取得する必要がある場合は、解析ライブラリでドラッグしてもほとんど意味がありません。
Boost がやり過ぎである場合は、この 6 Kb BSD ライセンス コードを試してください。
「inih (INI Not Invented Here) は、C で記述されたシンプルな .INI ファイル パーサーです。わずか数ページのコードであり、小さくてシンプルになるように設計されているため、組み込みシステムに適しています。」
http://code.google.com/p/inih/
オブジェクトを好む場合は、C++ クラスもあり、「;」の両方をサポートします。および「#」コメント。