[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
    
    
  
https://issues.dlang.org/show_bug.cgi?id=19980
          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");
        fw.close();
        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