byLine(n)?

Cym13 via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jun 11 05:49:51 PDT 2017


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?


More information about the Digitalmars-d-learn mailing list