Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Properties file library for C (or C++)

Tags:

c++

c

properties

The title is pretty self-explanatory: does anyone know of a (good) properties file reader library for C or, if not, C++?

Edit: To be specific, I want a library which handles the .properties file format used in Java: http://en.wikipedia.org/wiki/.properties

like image 726
JamieH Avatar asked May 17 '09 07:05

JamieH


People also ask

How read properties file in CPP?

It can be used to read from a file: using platformstl::properties_file; properties_file properties("stuff. properties"); properties_file::value_type value = properties["name"];

What is in properties file?

properties file is a simple collection of key-value pairs that can be parsed by the java. util. Properties class. Properties files are widely used for many purposes in all kinds of Java applications, often to store configuration or localization data.

What is the main benefit of using the properties file?

The advantage of using properties file is we can configure things which are prone to change over a period of time without the need of changing anything in code. Properties file provide flexibility in terms of configuration. Sample properties file is shown below, which has information in key-value pair.

Does properties file store configuration related data?

A Java properties file is used to store configuration data or settings for a Java project. .properties is a file extension for files that​ store the configurable parameters of an application. Recompilation is not required if modifications are made to a properties file.


2 Answers

STLSoft's 1.10 alpha contains a platformstl::properties_file class. It can be used to read from a file:

using platformstl::properties_file;

properties_file  properties("stuff.properties");

properties_file::value_type  value = properties["name"];

or from memory:

properties_file  properties(
    "name0=value1\n name1 value1 \n name\\ 2 : value\\ 2  ",
    properties_file::contents);

properties_file::value_type  value0 = properties["name0"];

properties_file::value_type  value1 = properties["name1"];

properties_file::value_type  value2 = properties["name 2"];

Looks like the latest 1.10 release has a bunch of comprehensive unit-tests, and that they've upgraded the class to handle all the rules and examples given in the Java documentation.

The only apparent rub is that the value_type is an instance of stlsoft::basic_string_view (described in this Dr Dobb's article), which is somewhat similar to std::string, but doesn't actually own its memory. Presumably they do this to avoid unneccessary allocations, presumably for performance reasons, which is something the STLSoft design holds dear. But it means that you can't just write

std::string  value0 = properties["name0"];

You can, however, do this:

std::string  value0 = properties["name0"].c_str();

and this:

std::cout << properties["name0"];

I'm not sure I agree with this design decision, since how likely is it that reading properties - from file or from memory - is going to need the absolute last cycle. I think they should change it to use std::string by default, and then use the "string view" if explicitly required.

Other than that, the properties_file class looks like it does the trick.

like image 145
dcw Avatar answered Sep 23 '22 02:09

dcw


libconfuse (C library) is useful, too; it's been around forever & is flexible.

  • ( www.nongnu.org/confuse/ ) http://www.nongnu.org/confuse/tutorial-html/index.html

It goes way, way beyond java.util.Properties. Though, it won't necessarily handle the corner cases of the java properties file format (which seems to be your requirement).

See the examples:

  • simple: www.nongnu.org/confuse/simple.conf
  • crazy: www.nongnu.org/confuse/test.conf

No C++ wrapper library, that I'm aware of, though.

like image 22
michael Avatar answered Sep 20 '22 02:09

michael