parrotcode: Lua Input/Output Library | |
Contents | Language Implementations | Lua |
lib/luaio.pir - Lua Input/Output Library
The I/O library provides two different styles for file manipulation. The first one uses implicit file descriptors, that is, there are operations to set a default input file and a default output file, and all input/output operations are over those default files. The second style uses explicit file descriptors.
When using implicit file descriptors,
all operations are supplied by table io
.
When using explicit file descriptors,
the operation io.open
returns a file descriptor and then all operations are supplied as methods by the file descriptor.
The table io
also provides three predefined file descriptors with their usual meanings from C: io.stdin
,
io.stdout
,
and io.stderr
.
A file handle is a userdata containing the file stream (FILE*), with a distinctive metatable created by the I/O library.
Unless otherwise stated, all I/O functions return nil on failure (plus an error message as a second result) and some value different from nil on success.
See "Lua 5.0 Reference Manual", section 5.6 "Input and Ouput Facilities".
io.close ([file])
file:close()
.
Without a file
,
closes the default output file.io.flush ()
file:flush
over the default output file.io.input ([file])
io.lines ([filename])
for line in io.lines(filename) do ... end
io.lines()
(without a file name) is equivalent to io.input():lines()
, that is, it iterates over the lines of the default input file.io.open (filename [, mode])
mode
. It returns a new file handle, or, in case of errors, nil plus an error message.mode
string can be any of the following:"r"
read mode (the default);"w"
write mode;"a"
append mode;"r+"
update mode, all previous data is preserved;"w+"
update mode, all previous data is erased;"a+"
append update mode, previous data is preserved, writing is only allowed at the end of file.mode
string may also have a b
at the end, which is needed in some systems to open the file in binary mode. This string is exactly what is used in the standard C function fopen
.io.output ([file])
io.input
, but operates over the default output file.io.read (format1, ...)
io.input():read
.io.tmpfile ()
io.type (obj)
obj
is a valid file handle. Returns the string "file"
if obj
is an open file handle, "closed file"
if obj
is a closed file handle, and nil if obj
is not a file handle.io.write (value1, ...)
io.output():write
.file:close ()
file
.file:flush ()
file
.file:lines ()
for line in file:lines() do ... end
io.lines
, this function does not close the file when the loop ends.)file:read (format1, ...)
file
, according to the given formats, which specify what to read. For each format, the function returns a string (or a number) with the characters read, or nil if it cannot read data with the specified format. When called without formats, it uses a default format that reads the entire next line (see below)."*n"
reads a number; this is the only format that returns a number instead of a string."*a"
reads the whole file, starting at the current position. On end of file, it returns the empty string."*l"
reads the next line (skipping the end of line), returning nil on end of file. This is the default format.file:seek ([whence] [, offset])
offset
plus a base specified by the string whence
, as follows:"set"
base is position 0 (beginning of the file);"cur"
base is current position;"end"
base is end of file;seek
returns the final file position, measured in bytes from the beginning of the file. If this function fails, it returns nil, plus a string describing the error.whence
is "cur"
, and for offset
is 0. Therefore, the call file:seek()
returns the current file position, without changing it; the call file:seek("set")
sets the position to the beginning of the file (and returns 0); and the call file:seek("end")
sets the position to the end of the file, and returns its size.file:write (value1, ...)
file
. The arguments must be strings or numbers. To write other values, use tostring
or string.format
before write.
|