> 백엔드 개발 > C++ > C를 사용하여 특정 옵션이나 섹션이 있는 INI 파일의 줄 번호를 어떻게 얻을 수 있습니까?

C를 사용하여 특정 옵션이나 섹션이 있는 INI 파일의 줄 번호를 어떻게 얻을 수 있습니까?

Linda Hamilton
풀어 주다: 2024-10-25 23:04:28
원래의
359명이 탐색했습니다.

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는 < 256이어야 합니다."라고 말할 수 있습니다.
  2. 섹션에 대해 INI 파일을 반복하고 해당 이름을 확인합니다. 알 수 없는 섹션이 발견되면 "라인 55: 섹션 [Hahaha]가 알 수 없음"이라고 보고할 수 있습니다.

응답:

Boost의 가능성 활용 Spirit, line_pos_iterator를 사용하여 솔루션을 만들었습니다.

구현 세부 정보:

  • POSITIONSINFO = 0:

    • 입력이 스트리밍 중입니다.
    • 출력이 원시 문자열 형식이거나 map> 섹션용.
    • 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿