Read a configuration file: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: added syntax colouring the hard way)
(Replaced “f.lines” with “"demo.config.lines()” avoiding expliciting "f". Replaced the OrderedTableRef with an OrderedTable. Some other minor changes.)
Line 3,116: Line 3,116:
=={{header|Nim}}==
=={{header|Nim}}==
<lang Nim>import re, strformat, strutils, tables
<lang Nim>import re, strformat, strutils, tables

var configs = newOrderedTable[string, seq[string]]()
var configs: OrderedTable[string, seq[string]]
var f = open("demo.config") ## shown above in description of the task
var parsed: seq[string]
var parsed: seq[string]


for line in f.lines():
for line in "demo.config".lines():
if not (line.startswith(re"#|;") or line.strip() == ""):
let line = line.strip()
parsed = line.strip().split(re"\s*=\s*|\s+", 1)
if line != "" and not line.startswith(re"#|;"):
if len(parsed) == 1:
parsed = line.split(re"\s*=\s*|\s+", 1)
configs[parsed[0].toLower()] = @[]
configs[parsed[0].toLower()] = if len(parsed) > 1: parsed[1].split(re"\s*,\s*") else: @[]

else:
for key in ["fullname", "favouritefruit", "needspeeling", "seedsremoved", "otherfamily"]:
configs[parsed[0].toLower()] = parsed[1].split(re"\s*,\s*")
f.close()
for key in ["fullname", "favouritefruit", "needspeeling", "seedsremoved",
"otherfamily"]:
if not configs.hasKey(key):
if not configs.hasKey(key):
echo(&"{key} = false")
echo(&"{key} = false")
Line 3,141: Line 3,137:
else:
else:
for i, v in configs[key].pairs():
for i, v in configs[key].pairs():
echo(&"{key}({i+1}) = {v}")
echo(&"{key}({i+1}) = {v}")</lang>
</lang>
{{out}}
{{out}}
<pre>
<pre>