ref: 36b4210be2a5d51607ba614d08e8369b19ca1e65
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 second line, should not include \r\n */
d = readln(f)
std.write(1, d)
std.write(1, "\n")
std.slfree(d)
/* read second line, should not include \r */
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")
-> [][:]
;;
}