byLine(n)?
Stanislav Blinov via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Jun 10 23:28:18 PDT 2017
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;
}
More information about the Digitalmars-d-learn
mailing list