Range for files by character

w0rp devw0rp at gmail.com
Mon May 20 14:40:50 PDT 2013


On Monday, 20 May 2013 at 21:36:41 UTC, Stephan Schiffels wrote:
> Hi,
>
> I need an Input Range that iterates a file character by 
> character. In bioinformatics this is often important, and 
> having a D-range is of course preferable than any 
> foreach-byLine combination, since we can apply filters and 
> other goodies from std.algorithm. In this implementation, I am 
> simply filtering out new-lines, as an example.
>
> import std.stdio;
> import std.conv;
> import std.algorithm;
>
> void main() {
>   auto f = File("someFile.txt", "r");
>   foreach(c; f.byChunk(1).filter!(a => to!char(a[0]) != '\n'))
>     write(to!char(c[0]));
> }
>
> Is this the right way to do it? I was a bit surprised that 
> std.stdio doesn't provide a "byChar" or "byByte" range. Is 
> there a reason for this, or is this a too special need?
>
> Stephan

I would try f.byChunk(n).joiner. joiner is from std.algorithm and 
it produces a range which joins a range of ranges, quite like 
your typical array to string join function.


More information about the Digitalmars-d mailing list