std.range.chunk without length
Stephan Schiffels
stephan_schiffels at mac.com
Thu Feb 13 02:12:58 PST 2014
On Thursday, 31 October 2013 at 10:35:54 UTC, Stephan Schiffels
wrote:
> On Wednesday, 30 October 2013 at 20:43:54 UTC, qznc wrote:
>> On Wednesday, 30 October 2013 at 00:20:12 UTC, Stephan
>> Schiffels wrote:
>>> Hi,
>>>
>>> I'd like a version of std.range.chunk that does not require
>>> the range to have the "length" property.
>>>
>>> As an example, consider a file that you would like parse by
>>> lines and always lump together four lines, i.e.
>>>
>>> import std.stdio;
>>> void main() {
>>> auto range = File("test.txt", "r").byLine();
>>> foreach(c; range.chunks(4)) { //doesn't compile
>>> writefln("%s %s", c[0], c[1]);
>>> }
>>> }
>>
>> Your wish was granted. Monarchdodra was sent back in time [0],
>> so it is already fixed in HEAD. You could try the dmd beta [1].
>>
>>
>> [0] https://github.com/D-Programming-Language/phobos/pull/992
>> [1]
>> http://forum.dlang.org/thread/526DD8C5.2040402@digitalmars.com
>
> Ah, awesome! Should have updated my github clone then.
> Thanks,
> Stephan
Sorry for the late follow up, but it turns out that
std.range.chunks needs a ForwardRange, and hence does not work on
File.byLine(). The referenced pull request claims that it does in
the comments, but of course the current implementation needs a
"save()" function which doesn't exist for the byLine range.
It would be actually easy to implement chunks without the "save"
function, by using an internal buffer, which would however make
this algorithm's memory burden linear in the chunk size. Would
that be acceptable? If so, I'd be happy to make that change and
push it.
Stephan
More information about the Digitalmars-d-learn
mailing list