On Fri, Nov 14, 2008 at 11:21 AM, Jeff Dunlap <jeff_j_dunlap@yahoo.com> wrote:
I've used Windows specific functions for reading/writing configuration (INI) files in my application and would like to know if there is a cross platform library available that is recommended.
I searched the boost libs for something and there are libs of course that can achieve this with some programming, but I'd like to know if there is something (boost or other library) with specific functionality to handle reading/writing INI files. Example:
[General] Language=Français
[Strings] String00001=Version String00002=Etes vous sûr ? String00003=Voulez-vous continuer ?
When I want to do something like this, I use Lua. Eg. conf.lua conf = { general = { language='Français', }, strings = { string00001='Version', string00002='Etes vous sûr ?', string00003='Voulez-vous continuer ?', }, } EOF main.cpp #include <iostream> #include <lua.hpp> #include <assert.h> int main() { lua_State* L = luaL_newstate(); assert(!luaL_dofile(L, "conf.lua")); lua_getglobal(L, "conf"); lua_getfield(L, lua_gettop(L), "general"); lua_getfield(L, lua_gettop(L), "language"); const char* language = lua_tostring(L, lua_gettop(L)); lua_pop(L, 2); lua_getfield(L, lua_gettop(L), "strings"); lua_getfield(L, lua_gettop(L), "string00001"); const char* string00001 = lua_tostring(L, lua_gettop(L)); lua_pop(L, 1); lua_getfield(L, lua_gettop(L), "string00002"); const char* string00002 = lua_tostring(L, lua_gettop(L)); lua_pop(L, 1); lua_getfield(L, lua_gettop(L), "string00003"); const char* string00003 = lua_tostring(L, lua_gettop(L)); std::cout << "language = " << language << std::endl; std::cout << "string00001 = " << string00001 << std::endl; std::cout << "string00002 = " << string00002 << std::endl; std::cout << "string00003 = " << string00003 << std::endl; } EOF output g++ -c -o main.o main.cpp -I<path to lua>/include g++ -o main main.o -L<path to lua>/lib -llua language = Français string00001 = Version string00002 = Etes vous sûr ? string00003 = Voulez-vous continuer ? EOF Of course, you can get more clever with the organization of your data and the iteration method than I have here (see lua_next over indexed tables (lists) instead of string00001, ...2, ...3, etc.) but you get the idea. Ken