Bagaimanakah saya boleh mendapatkan nombor baris fail INI di mana pilihan atau bahagian tertentu ditemui menggunakan C ?

Linda Hamilton
Lepaskan: 2024-10-25 23:04:28
asal
258 orang telah melayarinya

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

Cara merentas platform untuk mendapatkan nombor baris fail INI yang pilihan yang diberikan ditemui

Masalah:

Mencari pustaka C (seperti boost::program_options) yang boleh mengembalikan nombor baris fail INI yang pilihan atau bahagian tertentu ditemui.

Kes penggunaan:

  1. Minta perpustakaan untuk mencari nilai "vvv" dalam bahagian "[SSS]." Pustaka harus mengembalikan nombor baris di mana "vvv" ditemui dalam bahagian "[SSS]" atau -1. Ini membolehkan kita menyebut, sebagai contoh, "baris 55: vvv mestilah < 256."
  2. Lelaran melalui fail INI untuk bahagian dan sahkan namanya. Apabila bahagian yang tidak diketahui ditemui, kami boleh melaporkan "baris 55: bahagian [Hahaha] tidak diketahui."

Respons:

Mengeksploitasi kemungkinan Boost Semangat, penyelesaian telah dibuat menggunakan line_pos_iterator.

Butiran Pelaksanaan:

  • POSITIONSINFO = 0:

    • Input sedang distrim.
    • Output dalam format rentetan mentah atau peta> untuk bahagian.
    • POSITIONSINFO = 1:

      • Input ditimbal.
      • Output dalam format textnode_t:
      <code class="cpp">struct textnode_t {
        int sline, eline, scol, ecol;
        string_t text;
      };</code>
      Salin selepas log masuk
      • Ini membolehkan peta terhasil> untuk melaporkan baris dan lajur yang tepat bermula dan titik akhir untuk elemen teks individu.
      • Ulasan (#, / ... / gaya) dilaksanakan.
      • Ruang putih ialah bertolak ansur.
      • Melepaskan garis miring dibiarkan sebagai latihan.
      • Ralat dilaporkan dengan maklumat kedudukan penuh apabila didayakan.
    • Snippet Kod:

      <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>
      Salin selepas log masuk

      Sumber Tambahan:

      • [Intisari dengan kod lengkap, fail make dan example.ini]( https://gist.github.com/1425972)
      • [Dokumentasi Boost Spirit](https://www.boost.org/doc/libs/1_65_1/libs/spirit/doc/)

      Nota Penting: Penyelesaian yang disediakan tidak memerlukan sokongan C 11, tetapi ia digunakan untuk membuang hasil penghuraian.

      Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan nombor baris fail INI di mana pilihan atau bahagian tertentu ditemui menggunakan C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!