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