On Sunday, 11 June 2017 at 12:44:05 UTC, helxi wrote:
On Sunday, 11 June 2017 at 06:28:18 UTC, Stanislav Blinov wrote:
On Sunday, 11 June 2017 at 05:36:08 UTC, helxi wrote:
[...]
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;
}
I was actually just looking for ways to read the first n line
and then print it ($man head). My current program
1. reads all the lines provided by the stdin (bottleneck)
2. takes the first n lines (bottleneck)
3. prints each line
I want to
1. read all the lines
2. when line number n is reached, stop reading the rest of the
input
3. print each line
byLine doesn't reall all input at once. Using byline and take you
are effectively reading only the right amount of lines and not
reading the rest. You already have what you want, what makes you
think the contrary?