The task is to read a configuration file in standard configuration file format,
and set variables accordingly.

For this task, we have a configuration file as follows:

# This is a configuration file in standard configuration file format
#
# Lines beginning with a hash or a semicolon are ignored by the application
# program. Blank lines are also ignored by the application program.

# This is the fullname parameter
FULLNAME Foo Barber

# This is a favourite fruit
FAVOURITEFRUIT banana

# This is a boolean that should be set
NEEDSPEELING

# This boolean is commented out
; SEEDSREMOVED

# Configuration option names are not case sensitive, but configuration parameter
# data is case sensitive and may be preserved by the application program.

# An optional equals sign can be used to separate configuration parameter data
# from the option name. This is dropped by the parser. 

# A configuration option may take multiple parameters separated by commas.
# Leading and trailing whitespace around parameter names and parameter data fields
# are ignored by the application program.

OTHERFAMILY Rhu Barber, Harry Barber



For the task we need to set four variables according to the configuration entries as follows:

fullname = Foo Barber
favouritefruit = banana
needspeeling = true
seedsremoved = false


We also have an option that contains multiple parameters. These may be stored in an array.

 otherfamily(1) = Rhu Barber
 otherfamily(2) = Harry Barber


Related tasks
 Update a configuration file


import Nanoquery.IO
import dict
 
def get_config(fname)
        f = new(File).open(fname)
        lines = split(f.readAll(), "\n")
 
        values = new(Dict)
        for line in lines
                line = trim(line)
                if len(line) > 0
                        if not (line .startswith. "#") or (line .startswith. ";")
                                tokens = split(line, " ")
 
                                if len(tokens) = 1
                                        values.add(upper(tokens[0]), true)
                                else
                                        parameters = list()
                                        parameter = ""
                                        for i in range(1, len(tokens) - 1)
                                                parameter += tokens[i] + " "
                                                if parameter .endswith. ", "
                                                        parameter = parameter.substring(0, len(parameter) - 2)
                                                        parameters.append(trim(parameter))
                                                        parameter = ""
                                                end
                                        end
                                        parameters.append(trim(parameter))
                                        if len(parameters) > 1
                                                values.add(upper(tokens[0]), parameters)
                                        else
                                                values.add(upper(tokens[0]), parameters[0])
                                        end
                                end
                        end
                end
        end
 
        return values
end
 
println get_config(args[2])