[Issue 19980] New: File.byLine skips first line in some cases when used inside map!()

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Jun 17 21:17:17 UTC 2019


          Issue ID: 19980
           Summary: File.byLine skips first line in some cases when used
                    inside map!()
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: nairolf at online.de

I have tried to reduce this file as much as I could:

import std.stdio, std.algorithm, std.range;

void main( )
        // Preparation...
        auto fw = File("deleteme.txt", "w");
        fw.write("Line 1\nLine 2\nLine 3\n");
        File[] files = [File("deleteme.txt")];

        // Next line contains the bug:
        files.map!(f => f.byLine).tee!writeln.each;

Prints: ["Line 2\r", "Line 3\r"]
Should print: ["Line 1\r", "Line 2\r", "Line 3\r"]

It works correctly if I remove the tee!() and put the writeln in the each!():
files.map!(f => f.byLine).each!writeln;

It also works correctly if there is an ".array" after the map:
files.map!(f => f.byLine).array.tee!writeln.each;

The ".tee!writeln" is just there to generate some readable output. This was
originally found by using .joiner, where it also skips the first line:
auto a = files.map!(f => f.byLine).joiner;

Tested on DMD v2.087.0-beta.1 and LDC 1.15.0 (based on DMD v2.085.1).


More information about the Digitalmars-d-bugs mailing list