Creating a simple configuration file and parser in C++

前端 未结 12 689
谎友^
谎友^ 2020-12-07 10:55

I am trying to create a simple configuration file that looks like this

url = http://mysite.com
file = main.exe
true = 0

when the program ru

12条回答
  •  醉梦人生
    2020-12-07 11:40

    In general, it's easiest to parse such typical config files in two stages: first read the lines, and then parse those one by one.
    In C++, lines can be read from a stream using std::getline(). While by default it will read up to the next '\n' (which it will consume, but not return), you can pass it some other delimiter, too, which makes it a good candidate for reading up-to-some-char, like = in your example.

    For simplicity, the following presumes that the = are not surrounded by whitespace. If you want to allow whitespaces at these positions, you will have to strategically place is >> std::ws before reading the value and remove trailing whitespaces from the keys. However, IMO the little added flexibility in the syntax is not worth the hassle for a config file reader.

    const char config[] = "url=http://example.com\n"
                          "file=main.exe\n"
                          "true=0";
    
    std::istringstream is_file(config);
    
    std::string line;
    while( std::getline(is_file, line) )
    {
      std::istringstream is_line(line);
      std::string key;
      if( std::getline(is_line, key, '=') )
      {
        std::string value;
        if( std::getline(is_line, value) ) 
          store_line(key, value);
      }
    }
    

    (Adding error handling is left as an exercise to the reader.)

提交回复
热议问题