Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mendapatkan nombor baris fail INI di mana pilihan atau bahagian tertentu ditemui menggunakan C ?

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
431 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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan