File Api [Was: [your code here]]
bearophile
bearophileHUGS at lycos.com
Fri Feb 17 18:20:59 PST 2012
H. S. Teoh:
> P.S.S. The .idup is a bit ugly, but necessary, since apparently byLine()
> calls readln() with a static buffer, so choice will be silently
> overwritten if the .idup is omitted.
An alternative File API that to me looks nice. This is a first part, it's for scripting-like or not high performance purposes, it looks essentially like Python code, every line is a newly allocated string:
import std.stdio;
void main() {
string[] lines;
foreach (line; File("data.dat")) {
static assert(is(line == string));
lines ~= line;
}
}
If you don't want a new buffer every line you use something like this:
import std.stdio;
void main() {
string[] lines;
foreach (line; File("data.dat").fastLines()) {
static assert(is(line == char[]));
lines ~= line.idup;
}
}
So on default it's handy, short and safe, and with a method you avoid an allocation every line and get a mutable char[].
Maybe even this works, downloads a page and scans its lines, but maybe it's better to add a bit of extra safety to this:
foreach (line; File("http://www.dlang.org/faq.html")) {}
Bye,
bearophile
More information about the Digitalmars-d
mailing list