[RFC] Ini parser

Robik szadows at gmail.com
Thu Feb 16 12:50:22 PST 2012


Greetings.

Recently, I've been working on INI parser in D. The main goals 
were to keep code easy and well documented. Suggestions are 
really welcome(main reason of this thread) because it needs 
polishing and stuff.

It provides simple interface for operating on parsed file, 
including useful features like section inheriting and variable 
lookups. Here is simple example taken from README with little 
modifications:
import std.stdio;
    void main()
    {
         // Hard code the contents
         string c = "
    # defaults
    [def]
    name1:value1
    name2:value2

    ; override defaults
    [foo : def]
    name1=Name1 from foo. Lookup for def.name2: %name2%";

        // create parser instance
        auto iniParser = new IniParser();

        // Set ini structure details; can be ommited
        iniParser.commentChars = [';', '#'];
        iniParser.delimChars = ['=', ':'];


        // parse
        auto ini = iniParser.parse(c);

        // write foo.name1 value
        writeln(ini.getSection("foo")["name1"].value);
    }

You can also define parsing details, like commentCharacters* and 
others. As for the keys, structure is used rather than 
associative arrays. There's also bug** that does not allow 
chaining with opCall which I hope will be fixed :).

IniStructure (result of parsing) overloads some basic operators 
allowing you to looping through it and accessing data with 
opIndex and opCall.

Feel free to share suggestions, changes, help me make it better 
:).

Repo: https://github.com/robik/DIni
* https://github.com/robik/DIni/blob/master/src/dini.d#L400
** http://d.puremagic.com/issues/show_bug.cgi?id=7210


More information about the Digitalmars-d mailing list