#!/usr/bin/env rdmd
import std.algorithm;
import std.range;
import std.stdio;
import std.traits;
import std.file;
static import std.string;
alias std.algorithm.splitter splitter;
alias std.string.splitLines byLine;
template to(T) {
static import std.conv;
T to(S)(S s) if(!isArray!S && isInputRange!S) {
return std.conv.to!T(s.array());
}
T to(A...)(A args) {
return std.conv.to!T(args);
}
}
void main() {
auto content = q"EOS
1 2
2 3
3 4
4 5
EOS";
auto tmp = File("tmp.txt", "w");
scope(exit) std.file.remove("tmp.txt");
tmp.write(content);
tmp.close();
assert(equal(File("tmp.txt").byLine().map!(splitter)().map!(to!(int[]))(),
[[1, 2], [2, 3], [3, 4], [4, 5]]));
assert(equal(File("tmp.txt").byLine().map!(splitter)().map!(to!(int[]))(),
content.byLine().map!(splitter)().map!(to!(int[]))()));
}
IyEvdXNyL2Jpbi9lbnYgcmRtZAppbXBvcnQgc3RkLmFsZ29yaXRobTsKaW1wb3J0IHN0ZC5yYW5nZTsKaW1wb3J0IHN0ZC5zdGRpbzsKaW1wb3J0IHN0ZC50cmFpdHM7CmltcG9ydCBzdGQuZmlsZTsKCnN0YXRpYyBpbXBvcnQgc3RkLnN0cmluZzsKCmFsaWFzIHN0ZC5hbGdvcml0aG0uc3BsaXR0ZXIgc3BsaXR0ZXI7CmFsaWFzIHN0ZC5zdHJpbmcuc3BsaXRMaW5lcyBieUxpbmU7Cgp0ZW1wbGF0ZSB0byhUKSB7CiAgc3RhdGljIGltcG9ydCBzdGQuY29udjsKCiAgVCB0byhTKShTIHMpIGlmKCFpc0FycmF5IVMgJiYgaXNJbnB1dFJhbmdlIVMpIHsKICAgIHJldHVybiBzdGQuY29udi50byFUKHMuYXJyYXkoKSk7CiAgfQogIFQgdG8oQS4uLikoQSBhcmdzKSB7CiAgICByZXR1cm4gc3RkLmNvbnYudG8hVChhcmdzKTsKICB9Cn0KCnZvaWQgbWFpbigpIHsKICBhdXRvIGNvbnRlbnQgPSBxIkVPUwoxIDIKMiAzCjMgNAo0IDUKRU9TIjsKCiAgYXV0byB0bXAgPSBGaWxlKCJ0bXAudHh0IiwgInciKTsKICBzY29wZShleGl0KSBzdGQuZmlsZS5yZW1vdmUoInRtcC50eHQiKTsKICB0bXAud3JpdGUoY29udGVudCk7CiAgdG1wLmNsb3NlKCk7CgogIGFzc2VydChlcXVhbChGaWxlKCJ0bXAudHh0IikuYnlMaW5lKCkubWFwIShzcGxpdHRlcikoKS5tYXAhKHRvIShpbnRbXSkpKCksCiAgICAgICAgICAgICAgIFtbMSwgMl0sIFsyLCAzXSwgWzMsIDRdLCBbNCwgNV1dKSk7CgogIGFzc2VydChlcXVhbChGaWxlKCJ0bXAudHh0IikuYnlMaW5lKCkubWFwIShzcGxpdHRlcikoKS5tYXAhKHRvIShpbnRbXSkpKCksCiAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5ieUxpbmUoKS5tYXAhKHNwbGl0dGVyKSgpLm1hcCEodG8hKGludFtdKSkoKSkpOwp9Cg==