ref: 610852e18629b8a9a4c4f4ed6e6fc7a336152511
dir: /lib/bio/test/bio-delim.myr/
use std use bio const main = { var f var d match bio.open("data/lines", bio.Rd) | `std.Ok bio: f = bio | `std.Fail m: std.fatal("Unable to open data file: {}\n", m) ;; /* read first line */ d = readln(f) std.write(1, d) std.write(1, "\n") std.slfree(d) /* read second line, should not include \n */ d = readln(f) std.write(1, d) std.write(1, "\n") std.slfree(d) /* read to ';' */ d = readto(f, ";") std.write(1, d) std.write(1, "\n") std.slfree(d) /* read to ';' again */ d = readto(f, ";") std.write(1, d) std.write(1, "\n") std.slfree(d) /* '--' this time */ d = readto(f, "--") std.write(1, d) std.write(1, "\n") std.slfree(d) /* and without the terminator, we should get the remaining text */ d = readto(f, "not-there") std.write(1, d) std.write(1, "\n") std.slfree(d) /* and now, eof */ d = readln(f) d = readto(f, "actually, eof") bio.close(f) } const readln = {f match bio.readln(f) | `std.Some d: -> d | `std.None: std.put("eof\n") -> [][:] ;; } const readto = {f, delim match bio.readto(f, delim) | `std.Some d: -> d | `std.None: std.put("eof\n") -> [][:] ;; }