On Sunday, 11 June 2017 at 05:36:08 UTC, helxi wrote:
I was writing a program that reads and prints the first nth
lines to the stdout:
import std.stdio;
void main(string[] args)
{
import std.algorithm, std.range;
import std.conv;
stdin.byLine.take(args[1].to!ulong).each!writeln;
}
As far as I understand the stdin.byLine.take(args[1].to!ulong)
part reads all the lines written in stdin.
What if I want to make byLine read only and only first nth line?
stdin.byLine(args[1].to!ulong).each!writeln;
Obviously the code above won't work. Is there any efficient
workaround?
You need only the nth line? Then you'd need to `drop` the
preceding ones:
void main(string[] args) {
import std.algorithm, std.range, std.stdio, std.conv;
stdin.byLine.drop(args[1].to!int-1).front.writeln;
}
Or if you need every nth line, combine `drop` and `stride`:
void main(string[] args) {
import std.algorithm, std.range, std.stdio, std.conv;
auto step = args[1].to!int;
stdin.byLine.drop(step-1).stride(step).each!writeln;
}