Split range that has no length or slice?
Spacen Jasset via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Nov 9 13:48:23 PST 2015
On Monday, 9 November 2015 at 18:04:23 UTC, Alex Parrill wrote:
> On Monday, 9 November 2015 at 17:56:14 UTC, Alex Parrill wrote:
>> On Monday, 9 November 2015 at 15:23:21 UTC, Spacen Jasset
>> wrote:
>>> On Monday, 9 November 2015 at 14:58:19 UTC, Adam D. Ruppe
>>> wrote:
>>>> File has a .byLine and .byLineCopy method you could use to
>>>> just get lines from it.
>>>
>>> Ah yes. but unfortunately I don't want to do that. I want to
>>> pass a range into my print function. i.e. Sometimes it may
>>> not be a File, it might be from a string.
>>>
>>> Looks like it's not possible without adaptor code. I would
>>> suggest File should have a range function on it to return a
>>> range, for that matter byLine and byChunk probably shouldn't
>>> even be associated with file at all IMHO.
>>
>> The `.byLine` and `.byLineCopy` functions return ranges. Use
>> those.
>
> Scratch that, just read your post.
>
> Ideally, something like
> `file.byChunk(4096).joiner.splitter('\n')` would work. The
> issue is that the byChunk ranges aren't forward or sliceable
> ranges (which makes sense).
>
> Theoretically, it should be possible to implement `splitter`
> with a plain input range, but it would require that the
> sub-range that `splitter.front` returns be invalidated when
> calling `splitter.popFront`.
I don't yet understand the D ranges unfortunately. I can raise a
bug about this if people generally agree its currently not a good
situation. I don't see that The `.byLine` and `.byLineCopy`
functions should be on the File object either. They are surely
part of range algorithms, or string functions like
std.string.lineSplitter
More information about the Digitalmars-d-learn
mailing list