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


a = open("rosetta_read.cfg")
 
while(not eof(#a))
    FLAG = true : REMARK = false
    line input #a line$
    line$ = trim$(line$)
    ll = len(line$)
    c$ = left$(line$, 1)
    switch(c$)
        case "": case "#": REMARK = true : break
        case ";": FLAG = false : line$ = trim$(right$(line$, ll - 1)) : break
        default: MULTI = instr(line$, ",")
    end switch  
 
    if not REMARK then
        GAP = instr(line$, "=") : if not GAP GAP = instr(line$, " ")
        if not GAP then
            print line$, " = ";
            if FLAG then print "true" else print "false" end if
        else
            if MULTI then
                count = 1 : SG = GAP
                repeat
                    print left$(line$, GAP - 1), "(", count, ") = ", trim$(mid$(line$, SG + 1, MULTI - SG - 1))
                    count = count + 1
                    SG = MULTI + 1 : MULTI = instr(line$, ",", SG)
                    if not MULTI MULTI = ll + 1
                until(SG > ll)
            else
                print left$(line$, GAP - 1), " = ", trim$(right$(line$, ll - GAP))
            end if
        end if
    end if
wend
 
close #a