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