For fun: Expressive C++ 17 Coding Challenge in D
lithium iodate
whatdoiknow at doesntexist.net
Wed Oct 4 19:53:59 UTC 2017
On Wednesday, 4 October 2017 at 15:30:08 UTC, Ali Çehreli wrote:
> the hidden \r characters at the ends
Those got me too!
Here's my less than optimal solution:
int main(string[] args)
{ import std.stdio;
import std.algorithm.iteration : map, splitter, joiner, each;
import std.algorithm.searching : countUntil;
import std.range : enumerate;
import std.string : chomp;
if (args.length != 5 && args.length != 4)
{ stderr.writeln("Something went wrong and it's obviously
your fault.");
return 1;
}
immutable columnID = args[2];
immutable substitute = args[3];
auto data = File(args[1], "r").byLine.map!chomp;
if (data.empty)
{ stderr.writeln("input file missing\n\n(actually it
exists, it's just "
~ "empty)\n\n(your fault regardless)");
return 1;
}
File output;
if (args.length == 5)
output = File(args[4], "w");
else
output = stdout;
immutable matchedColumn =
data.front.splitter(",").countUntil(columnID);
if (matchedColumn < 0)
{ stderr.writeln("column name doesn’t exist in the input
file\n\n(and "
~ "it's your fault)");
return 1;
}
output.writeln(data.front);
data.popFront;
data.map!(line => line
.splitter(",")
.enumerate
.map!(a => a.index == matchedColumn ? substitute :
a.value)
.joiner(",")).each!(a => output.writeln(a));
return 0;
}
I think the biggest problem is the lack of support for quoted
content.
More information about the Digitalmars-d-learn
mailing list