read_until
result = read_until(f, delimiter)
Input: f, delimiter · Output: result
What it is
Reads from f (file handle, opened readable) up to and including the next occurrence of delimiter (string), consuming it.
Overloads
One call shape — this function is not overloaded.
| Code | Input | Output | Description |
result = read_until(f, delimiter) | f stringnot documented yetdelimiter stringnot documented yet | result string | Returns a string of everything read, with delimiter stripped off the end. If delimiter never appears again before EOF, returns everything remaining instead of erroring. |
Examples
From the documentation, and run by the build -- the output and the figure below are what the engine actually produced. Simplest first.
f = fopen("greeting.txt", "w")
write_char(f, "Hello,World")
close(f)
g = fopen("greeting.txt", "r")
first = read_char(g) # "H"
peeked = peek_char(g) # "e" -- cursor not moved
next = read_char(g) # "e" again, same char peeked returned
chunk = read_chars(g, 3) # "llo"
next_byte = peek_byte(g) # 44, the byte for ',' -- still not consumed
before_comma = read_until(g, ",") # "" -- the comma was right there, now consumed
w_byte = read_byte(g) # 87, the byte for 'W'
rest = read_all(g) # "orld"
close(g)
print("{first}{next}{chunk} peeked={peeked} next_byte={next_byte} before_comma=\"{before_comma}\" w_byte={w_byte} rest={rest}")
# Hello peeked=e next_byte=44 before_comma="" w_byte=87 rest=orld
output
Hello peeked=e next_byte=44 before_comma="" w_byte=87 rest=orld
from file-io
How it works
read_until(f, delimiter) — reads up to (and consuming) the next occurrence of delimiter; if delimiter never appears before EOF, returns everything remaining (not an error — there's nothing exceptional about a delimiter simply not being there again).
From the note above this builtin in the interpreter, where the reasoning was written down as it was built.