shithub: mc

ref: b319e47808ef74e3ed23a624ac9965551a7f51b5
dir: /lib/bio/test/bio-delim.myr/

View raw version
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")
			-> [][:]
	;;
}