line terminators
rassoc
rassoc at posteo.de
Wed Sep 28 21:17:16 UTC 2022
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
More information about the Digitalmars-d-learn
mailing list