1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
use std
use bio
const main = {
var f
var d
match bio.open("data/lines", bio.Rd)
| `std.Ok bio: f = bio
| `std.Err 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)
| `bio.Ok d: -> d
| `bio.Eof:
std.put("eof\n")
-> [][:]
| `bio.Err e:
std.put("err\n")
-> [][:]
;;
}
const readto = {f, delim
match bio.readto(f, delim)
| `bio.Ok d: -> d
| `bio.Eof:
std.put("eof\n")
-> [][:]
| `bio.Err e:
std.put("err\n")
-> [][:]
;;
}
|