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?

Reply via email to