Back to library index.
Package std-fileio (in std.i) - generic file i/o
Index of documented functions or symbols:
DOCUMENT close, f
closes the I/O stream F (returned earlier by the open function).
If F is a simple variable reference (as opposed to an expression),
the close function will set F to nil. If F is the only reference
to the I/O stream, then "close, f" is equivalent to "f= []".
Otherwise, "close, f" will close the file (so that subsequent
I/O operations will fail) and print a warning message about the
outstanding ("stale") references.
SEE ALSO: open, read, write, rdline, bookmark, backup, save, restore, rename, remove
DOCUMENT f= create(filename) is a synonym for f= open(filename, "w") Creates a new text file FILENAME, destroying any existing file of that name. Use the write function to write into the file F.
DOCUMENT fflush, file flush the I/O buffers for the text file FILE. (Binary files are flushed at the proper times automatically.) You should only need this after a write, especially to a pipe.
DOCUMENT filepath(file); Return full path name of file(s). Argument FILE can be either an open binary/text file or an array of file names (in the latter case tilde expansion is performed and the result will have the same shape as the input).
DOCUMENT f= open(filename)
or f= open(filename, filemode)
or f= open(filename, filemode, errmode)
opens the file FILENAME according to FILEMODE (both are strings).
If ERRMODE is non-nil and non-zero, fail by returning nil F,
otherwise failure to open or create the file is a runtime error.
To use ERRMODE to check for the existence of a file:
if (open(filename,"r",1)) file_exists;
else file_does_not_exist;
The return value F is an IOStream (or just stream for short). When
the last reference to this return value is discarded, the file will
be closed. The file can also be explicitly closed with the close
function. The FILEMODE determines whether the file is to be
opened in read, write, or update mode, and whether writes are
restricted to the end-of-file (append mode). FILEMODE also
determines whether the file is opened as a text file or as a
binary file. FILEMODE can have the following values, which are
the same as for the ANSI standard fopen function:
"r" - read only
"w" - write only, random access, existing file overwritten
"a" - write only, forced to end-of-file,
existing file preserved
"r+" - read/write, random access, existing file preserved
"w+" - read/write, random access, existing file overwritten
"a+" - read/write, reads random access,
writes forced to end-of-file, existing file preserved
"rb" "wb" "ab" "r+b" "rb+" "w+b" "wb+" "a+b" "ab+"
without b means text file, with b means binary file
The default FILEMODE is "r" -- open an existing text file for
reading.
The read and write functions perform I/O on text files.
I/O to binary files may be performed explicitly using the save
and restore functions, or implicitly by using the stream variable
F as if it were a data structure instance (e.g.- f.x refers to
variable x in the binary file f).
SEE ALSO: create, close, read, write, rdline, bookmark, backup, popen, vopen, rename, remove, save, restore
DOCUMENT f= popen(command, mode) opens a pipe to COMMAND, which is executed as with the system function. If MODE is 0, the returned file handle is open for reading, and you are reading the stdout produced by COMMAND. If MODE is 1, f is opened for writing and you are writing to the stdin read by COMMAND.
SEE: rename
DOCUMENT contents = vclose(handle) closes a file handle opened with vopen, returning the contents as an array. As a side effect, the handle is set to nil [], as in close. For a read-only handle, the contents will be the same as the array passed to the vopen call which returned the handle. For a read-write handle, vclose is the only way to get back what you have written to the file; if you close such a file using the ordinary close function, you will lose what you have written.
DOCUMENT f = vopen(source)
or f = vopen(source, 1)
opens SOURCE, which can be a string or char array, as if it were a
file, returning a file handle. The file handle will be a text file
unless the optional second argument is non-nil and non-zero, as in
the second form. For the case of a binary file, SOURCE must be a
char array. Any dimensions of a char array are ignored in either
case. For a text file, if SOURCE is a string array, each array element
is treated as one line of text. For a text file char array, "\n",
"\r", "\r\n", or "\0" are all recognized as newline markers. These
are read only files.
If SOURCE is nil, the file handle will be read-write. After writing
the in-memory file, you can retrieve the finished array with the
vclose function. If the file is text, the array will be an array of
strings, one per line. If the file is binary, the array will be an
array of char.
DOCUMENT bytes = vpack(var1, var2, ...);
or vfile = vopen(,1);
vpack, vfile, var1, var2, ...;
vpack, vfile, var3, var4, ...;
...
bytes = vpack(vfile);
pack variables into a byte stream, preserving data types and dimensions.
If the first argument is an in-memory file created by vopen(,1), then
vpack appends the variables to the file; to close the file, supply
no new variables to pack. The VARi must be arrays, and may not be
pointers or struct instances. If you want to store pointers or struct
instances and preserve variable names, use vsave.
The returned byte stream contains the primitive data formats (as
returned by get_primitives), so it can be used on a platform other
than the one on which vpack was run.
DOCUMENT c = vsave(var1, var2, ...);
or c = vsave(var1, ..., string(namea), vara, ...);
or vfile = createb(char);
vsave, vfile, var1, var2, ...;
vsave, vfile, var3, var4, ...;
...
c = vsave(vfile);
save the array variables VAR1, VAR2, ..., in the char array that is
returned. Any of the variables may instead be a string expression
NAMEA followed by the value VARA of the variable. The NAMEA argument
is recognized as the name of the following argument by being an
expression; arguments that are to be stored in f must be simple
variable references. You can achieve this as shown by placing the
argument inside a call to string(), or by adding "", or simply by
passing a constant string value like "myvarname".
If you wish to build up a char array over several calls to vsave,
pass the first argument VFILE, which you create with createb(char).
A final call with no variables returns the char array and closes
VFILE.
You can pass the returned char array to openb, f=openb(c), to get
an in-memory file handle f like any other binary file handle,
allowing you to use the restore function, or the f.var1 syntax,
or the get_member function.
You can set the internal primitives using the prims= keyword; see
createb for details.
SEE ALSO: openb, vopen, vpack, restore, get_member, wrap_args
DOCUMENT eof = vunpack(bytes, var1, var2, ...);
or nextvar = vunpack(bytes,-);
or vunpack, bytes;
unpack variables VAR1, VAR2, ... from a byte stream BYTES created
with vpack. The vunpack call modifies BYTES to save the number of
variables which have already been unpacked, so you can perform the
unpack operation with multiple calls. Calling vunpack as a
subroutine with no VARi arguments resets this information, restoring
BYTES to its original value (that is, as vpack returned it).
Called as a function, vunpack returns 1 if more variables remain
to be unpacked, or 0 if no more variables remain.
For example, if BYTES contains 5 variables:
bytes = vpack(var1, var2, var3, var4, var5);
You can retrieve the variables by a single call to vunpack:
vunpack, bytes, var1, var2, var3, var4, var5;
Or by a sequence of calls to vunpack:
vunpack, bytes, var1, var2;
vunpack, bytes, var3, var4, var5;
