std.range.byLine

monarch_dodra via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Sep 11 03:19:16 PDT 2014


On Wednesday, 10 September 2014 at 23:01:44 UTC, Nordlöw wrote:
> On Wednesday, 10 September 2014 at 22:45:08 UTC, Nordlöw wrote:
>> auto byLine(Range)(Range input) if (isForwardRange!Range)
>> {
>>    import std.algorithm: splitter;
>>    import std.ascii: newline;
>>    static if (newline.length == 1)
>>    {
>>        return input.splitter(newline.front);
>>    }
>>    else
>>    {
>>        return input.splitter(newline);
>>    }
>> }
>
> IMHO, this should be added to std.string and restricted to 
> isSomeString. Should I do a PR?

Well, the issue is that this isn't very portable for *reading*, 
as even on linux, you may read files with "\r\n" line endings 
(It's "standard" for csv files, for example), or read "\n" 
terminated files on windows.

The issue is that (currently) we don't have any splitter that 
operates on multiple needles. *That'd* be what needs to be 
written (probably not too hard either, since "find" already 
exists).

We also have splitLines, 
"http://dlang.org/phobos/std_string.html#.splitLines". Is that 
good enough for you by any chance? Or do you need it to actually 
be lazy?


More information about the Digitalmars-d-learn mailing list