File.byLine should return dups?
Graham Fawcett
fawcett at uwindsor.ca
Fri Jun 4 12:35:06 PDT 2010
Hi folks,
I expected this program to print the lines of a file in reverse order:
// bad.d
import std.stdio;
import std.range;
void main() {
auto f = File("bad.d");
foreach(char[] line; retro(array(f.byLine())))
writeln(line);
}
...but instead it prints a jumble of line fragments. I suspect that
it's because byLine() is not dup'ing the arrays it's reading from the
file?
This version works:
// good.d
import std.stdio;
import std.range;
Retro!(char[][]) retroLines(File f) {
char[][] lines;
foreach(line; f.byLine())
lines ~= line.dup; // note the .dup!
return retro(lines);
}
void main() {
auto f = File("good.d");
foreach(line; retroLines(f))
writeln(line);
}
..but if you remove the '.dup' then it prints a similar mess.
So, is there a bug in byLine(), or am I just using it wrong?
Best,
Graham
More information about the Digitalmars-d
mailing list