File: //usr/share/slsh/help/readascii.hlp
readascii
SYNOPSIS
Read data from a text file
USAGE
Int_Type readascii (file, &v1,...&vN ; qualifiers)
DESCRIPTION
This function may be used to read formatted data from a text (as
opposed to binary) file and stores the values as arrays in the
specified variables `v1,..., vN' (passed as references). It
returns the number of lines read from the file that matched the
format (implicit or specified by a qualifier).
The file parameter may be a string that gives the filename to read,
a `File_Type' object representing an open file pointer, or an
array of lines to be scanned.
QUALIFIERS
The following qualifiers are supported by the function
format=string The sscanf format string to be used when
parsing lines.
nrows=integer The maximum number of matching rows to handle.
ncols=integer If a single reference is passed, it will be
assigned an array of ncols arrays of data values.
skip=integer Skip the specified number of lines before
scanning
maxlines=integer Read no more than this many lines.
cols=Array_Type Read only the specified (1-based) columns.
Used with an implict format
delim=string For an implicit format, use this as a field
separator. The default is whitespace.
type=string For an implicit format, use this sscanf type
specifier. Default is %lf (Double_Type).
size=integer Use this value as the initial size for the
arrays.
dsize=integer Use this value as an increment when
reallocating the arrays.
stop_on_mismatch Stop reading input when a line does not match
the format
lastline=&v Assign the last line read to the variable v.
lastlinenum=&v Assign the last line number (1-based to v)
comment=string Lines beginning with this string are ignored.
as_list If present, then return data in lists rather
than arrays.
EXAMPLE
As a simple example, consider a file called `imped.dat' containing
# Distance Zr Zi
0.0 50.2 0.1
1.0 47.3 -12.2
2.0 43.9 -15.8
The 3 columns may be read and stored in the variables `x', `zr',
`zi' using
n = readascii ("imped.dat", &x, &zr, &zi);
After return, The value of `x' will be set to
`[0.0,1.0,2.0]', `zr' to `[50.2,47.3,43.9]',
`zi' to `[0.1,-12.2,-15.8]', and `n' to 3.
Another way to read the same data is to use
n = readascii ("imped.dat", &data; ncols=3);
In this case, `data' will be `Array_Type[3]', with each
element of the array containing the array of data values for the
corresponding column. As before, `n' will be 3.
As a more complex example, Consider a file called `score.dat'
that contains:
Name Score Date Flags
Bill 73.2 03-Nov-2046 1
James 22.9 03-Nov-2046 1
Lucy 89.1 04-Nov-2046 3
This file may be read using
n = readascii ("score.dat", &name, &score, &date, &flags;
format="%s %lf %s %d");
In this case, `n' will be 3, `name' and `date' will
be String_Type arrays, `score' will be a
Double_Type array, and `flags' will be an
`Int_Type' array.
Now suppose that only the score and flags column are of interest.
The `name' and `date' fields may be ignored using
n = readascii ("score.dat", &score, &flags";
format="%*s %lf %*s %d");
Here, `%*s' indicates that the field is to be parsed as a
string, but not assigned to a variable.
Consider the task of reading columns from a file called
`books.dat' that contain quoted strings such as:
# Year Author Title
"1605" "Miguel de Cervantes" "Don Quixote de la Mancha"
"1885" "Mark Twain" "The Adventures of Huckleberry Finn"
"1955" "Vladimir Nabokov" "Lolita"
Such a file may be read using
n = readascii ("books.dat", &year, &author, &title;
format="\"%[^\"]\" \"%[^\"]\" \"%[^\"]\"");
NOTES
This current version of this function does not handle missing data.
For such files, the `csv_readcol' function might be a better
choice.
By default, lines not matching the expected format are assumed to
be comments and are skipped. So normally the `comment'
qualifier is not needed. However, it is useful in conjunction with
the `stop_on_mismatch' qualifier to force the parser to skip
lines beginning with the comment string and continue scanning.
SEE ALSO
sscanf, atof, fopen, fgets, fgetslines, csv_readcol
--------------------------------------------------------------