


The simplest way to read a text file foo.txt as a list of lines is to use the lines function from the file package:
line_list = file::lines "foo.txt";
Thus, for example, a quick and easy way to print out the contents of a file is
foreach (file::lines "foo.txt") .{ print #line; };
If you like to see more of what is going on under the hood, file::lines is equivalent to
fun lines filename
=
{ fd = file::open_for_read filename;
line_list = file::read_lines fd;
file::close_input fd;
line_list;
};
where in turn file::read_lines is equivalent to
fun read_lines input_stream
=
read_lines' (input_stream, [])
where
fun read_lines' (input_stream, lines_so_far)
=
case (file::read_line input_stream)
NULL => reverse lines_so_far;
THE line => read_lines' (input_stream, line ! lines_so_far);
esac;
end;
If you want to trap failures to open the specified file, issue an error message, and continue, you can write
fun lines filename
=
{ fd = file::open_for_read filename;
line_list = file::read_lines fd;
file::close_input fd;
line_list;
}
except io_exceptions::IO _
=
{ fprintf stderr "Could not open %s to read, treating it as empty.\n" filename;
[];
};


