On Friday, 11 May 2012 at 15:18:11 UTC, H. S. Teoh wrote:
On Fri, May 11, 2012 at 05:00:16PM +0200, Paul wrote:
I would like to read a complete file in one statement and then
process it line by line.

foreach (line; MyFile)
etc.

Is it possible to read a file into and array of lines?

import std.array;
import std.stdio;

string[] getLines(File f) {
        auto a = appender!string;
        foreach (line; f.byLine()) {
                a.put(line);
        }
        return a.data;
}

Does that work? I think you mean:

string[] getLines(File f) {
  auto a = appender!(string[]);
  foreach (line; f.byLine()) {
    a.put(line.idup);
  }
  return a.data;
}

You could also write:

string[] getLines(File f)
{
  return array(map!"a.idup"(f.byLine));
}

Or

{
  return f.byLine.map!"a.idup".array;
}


This may be slower than the appender version, which is optimized for performance; I'm not sure.

Graham

Reply via email to