On 9/28/22 21:36, NonNull via Digitalmars-d-learn wrote:
If I want to read a text file line by line, treating any one of these things as
a newline, there would seem to be no canned way to do that in std.stdio .
1.) What is the best way to achieve this result in D?
If you have structured data, you can use byRecord [1] to read the important
parts right into a tuple.
Should it be unstructured data, then there's lineSplitter [2] which handles all
of the above newline specifics, I think. Sadly, it's working on text and not on
files.
So, for small files you could just read the whole file via readText [3] and
process it via lineSplitter.
If the file is rather large, then there's the option to use memory-mapped files
instead:
```d
import std;
void main() {
scope mmfile = new MmFile("largefile.txt");
auto data = cast(string) mmfile[];
foreach (line; data.lineSplitter) {
// process line, os handles memory-mapped file buffering
}
}
```
Hope that helps.
[1] https://dlang.org/library/std/stdio/file.by_record.html
[2] https://dlang.org/library/std/string/line_splitter.html
[3] https://dlang.org/library/std/file/read_text.html