Méthode multiplateforme pour obtenir le numéro de ligne d'un fichier INI où une option donnée a été trouvée
Problème :
Recherche d'une bibliothèque C (comme boost::program_options) qui peut renvoyer le numéro de ligne d'un fichier INI où une option ou une section donnée a été trouvée.
Cas d'utilisation :
Réponse :
Exploiter les possibilités de Boost Spirit, une solution a été conçue à l'aide de line_pos_iterator.
Détails de mise en œuvre :
POSITIONSINFO = 0 :
POSITIONSINFO = 1 :
<code class="cpp">struct textnode_t { int sline, eline, scol, ecol; string_t text; };</code>
Extrait de 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>
Ressources supplémentaires :
Remarque importante : La solution fournie ne nécessite pas le support de C 11, mais elle a été utilisée pour vider le résultat de l'analyse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!