C を使用して、特定のオプションまたはセクションが見つかった INI ファイルの行番号を取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-10-25 23:04:28
オリジナル
258 人が閲覧しました

How can I get the line number of an INI file where a specific option or section is found using C  ?

指定されたオプションが見つかった INI ファイルの行番号を取得するクロスプラットフォームの方法

問題:

指定されたオプションまたはセクションが見つかった INI ファイルの行番号を返すことができる C ライブラリ (boost::program_options など) を探しています。

使用例:

  1. ライブラリにセクション「[SSS]」の値「vvv」を見つけるように依頼します。ライブラリは、「[SSS]」セクションで「vvv」が見つかった行番号または -1 を返す必要があります。これにより、たとえば、「行 55: vvv は
  2. セクションの INI ファイルを反復処理し、その名前を検証することができます。不明なセクションが見つかった場合は、「55 行目: セクション [Hahaha] は不明です」と報告できます。

応答:

Boost の可能性を活用する精神、ソリューションは line_pos_iterator を使用して作成されました。

実装の詳細:

  • POSITIONSINFO = 0:

    • 入力はストリーミングです。
    • 出力は生の文字列形式、またはマップ<文字列、マップ<文字列、文字列>>です。セクションの場合。
  • POSITIONSINFO = 1:

    • 入力はバッファリングされています。
    • 出力は入力されていますtextnode_t 形式:
    <code class="cpp">struct textnode_t {
      int sline, eline, scol, ecol;
      string_t text;
    };</code>
    ログイン後にコピー
    • これにより、結果のマップ>が有効になります。個々のテキスト要素の正確な行と列の開始点と終了点をレポートします。
    • コメント (#、/ ... / スタイル) が実装されています。
    • 空白は
    • スラッシュのエスケープ解除は演習として残されています。
    • 有効にすると、エラーは完全な位置情報とともに報告されます。

コード スニペット:

<code class="cpp">#include <map>
#include <string>
#include <iterator>
#include <boost/tuple/tuple_comparison.hpp>

template <typename S = std::string, typename Cmp = std::less<S>>
class IniFile {
public:
    IniFile(Cmp cmp = Cmp()) : _cmp(cmp) {}

    IniFile(const std::string& filename, Cmp cmp = Cmp()) : _cmp(cmp) { open(filename); }

    void open(const std::string& filename);

typedef S string_t;
#if POSITIONINFO
    struct textnode_t {
        int sline, eline,
            scol, ecol;
        string_t text;

        // ...
    };
#else
    typedef string_t textnode_t;
#endif

typedef std::pair<textnode_t, textnode_t> keyvalue_t;
typedef std::map<textnode_t, textnode_t> section_t;
typedef std::map<textnode_t, section_t> sections_t;

private:
    Cmp _cmp;
};</code>
ログイン後にコピー

追加リソース:

  • [完全なコード、makefile、example.ini を含む要点]( https://gist.github.com/1425972)
  • [Boost Spirit ドキュメント](https://www.boost.org/doc/libs/1_65_1/libs/spirit/doc/)

重要な注意: 提供されたソリューションは C 11 サポートを必要としませんが、解析の結果をダンプするために使用されました。

以上がC を使用して、特定のオプションまたはセクションが見つかった INI ファイルの行番号を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!