Read a configuration file: Difference between revisions
→{{header|D}}
Line 1,292:
=={{header|D}}==
<syntaxhighlight lang="d">import std.stdio, std.string, std.conv, std.regex, std.getopt;
enum VarName(alias var) = var.stringof
void setOpt(alias Var)(in string line) {
auto m = match(line, regex(`^(?i)` ~ VarName!Var ~ `(?-i)(\s*=?\s+(.*))?`));
if (!m.empty) {
static if (is(typeof(Var) == string[]))
Var = m.captures.length > 2 ? m.captures[2].split(regex(`\s*,\s*`)) : [""];
static if (is(typeof(Var) == string))
Var = m.captures.length > 2 ? m.captures[2] : "";
Line 1,312 ⟶ 1,313:
void main(in string[] args) {
string fullName, favouriteFruit
string[] otherFamily;
bool needsPeeling, seedsRemoved; // Default false.
auto f = "readcfg.
foreach (line; f.byLine) {
auto opt = line.strip.idup;
setOpt!fullName(opt);
setOpt!favouriteFruit(opt);
Line 1,325 ⟶ 1,329:
}
writefln("%
writefln("%
writefln("%
writefln("%
writefln("%
}</syntaxhighlight>
{{out}}
<pre>
=== Variant 2 ===
|