Port: useful functions for operating on ports
by Noel Welsh (noelwelsh at GMail)
The Port library contains useful functions for operating on ports, based on those provided by Scsh.
1 API
(require (planet schematics/port:1)) |
(port->list reader [port]) → (listof any) |
reader : (-> input-port? any) |
port : input-port? = (current-input-port) |
Applys reader to the port, accumulating results in a list. If no input-port is given the value of current-input-port is used.
(port->bytes [port]) → bytes? |
port : input-port? = (current-input-port) |
Returns a bytes string containing all bytes read from the port. Reading stops when the port returns the eof-object. If no input-port is given the value of current-input-port is used.
(port->string [port]) → string? |
port : input-port? = (current-input-port) |
Returns a string containing all characters read from the port. Reading stops when the port returns the eof-object. Data is converted from bytes using the UTF-8 conversion. I.e. this function is equivalent to
(bytes->string/utf-8 (read-bytes port))
If no input-port is given the value of current-input-port is used.
(port->string-list [port]) → (listof string?) |
port : input-port? = (current-input-port) |
Returns a list of all lines from the port (as returned by read-line). Reading stops when the port returns the eof-object. If no input-port is given the value of current-input-port is used.
(post->sexp-list [port]) → (listof any) |
port : input-port? = (current-input-port) |
Returns a list of all data read from the port (using the read function). Reading stops when the port returns the eof-object. If no input-port is given the value of current-input-port is used.
| ||||||||
port : input-port? | ||||||||
reader : (->* (input-port?) ('a 'b ...)) | ||||||||
op : (->* ('a 'b ...) (b'...)) | ||||||||
seed : 'b |
To quote the Scsh manual: "This procedure can be used to perform a variety of iterative operations over an input stream. It repeatedly uses reader to read an object from port. If the first read returns eof, then the entire port-fold operation returns the seeds as multiple values. If the first read operation returns some other value v, then op is applied to v and the seeds: (op v . seeds). This should return a new set of seed values, and the reduction then loops, reading a new value from the port, and so forth. (If multiple seed values are used, then op must return multiple values.)"