S-Lang function to read in an ASCII data file.
Struct_Type readascii( filename )
Struct_Type readascii( filename, cols )
Struct_Type readascii( filename, cols, nskip )
Error Return Value: NULL
Arguments:
filename is a String_Type variable
cols is either a String_Type variable or an Int_Type array
nskip is an Int_Type variable
The readascii() function allows you to read in ASCII data
files into S-Lang. It can be called either directly
or indirectly (i.e. when using the readfile() function).
The ahelp page for readfile describes the features of this
routine that are common to all the "read" functions provided
by the Varmm module. This page describes those features that
are unique to the readascii() command.
The filename argument should be a string that contains the
name of the file to be read in. Unlike the other "read"
functions, it can not include any Data Model syntax.
The optional parameter "cols" is a list of column names or numbers
to be read, and "nskip" is the number of rows to be skipped.
As examples:
chips> d1 = readascii( "table.dat" )
chips> d2 = readascii( "table.dat","1,3,5", 10 )
where the second example only reads in the first, third, and
fifth columns and skips the first ten lines of the files.
The format is the same as recognised by the ascii2fits
tool. An optional header - with lines beginning with the
"#" character - is ignored.
The first line that does not begin with a "#" character
is used to define the format of the file (i.e. the number of
columns). The following lines should contain the same number of
columns as the first line, otherwise the data may not
be read in correctly. Any lines beginning with a "#" in
this section will be read as a set of 0's.
Only numeric columns are currently read in; character columns
will generally result in a column of zeroes.
The function returns a structure whose fields contain the
data read in from the file. If an error occurred - such
as the file not being found, or it is not an ASCII file -
then NULL is returned instead.
The returned structure follows the format of the other
"read" functions: metadata - i.e. information about the
file - is stored in fields beginning with an underscore
character followed by fields containing the input data.
The initial fields are discussed in "ahelp readfile";
here we concentrate on those fields specific to
ASCII files.
Fields specific to tables:
_ncols |
The number of columns read in.
|
_nrows |
The number of rows read in.
|
col1 |
The first column.
|
col<n> |
The nth column.
|
For example:
chips> !cat test.dat
1 2 3
5 9 -3.1
chips> dat = readascii( "test.dat" )
chips> print( evt )
_filename = test.dat
_path = /data/analysis/
_filter = NULL
_filetype = 1
_header = NULL
_ncols = 3
_nrows = 2
col1 = Float_Type[2]
col2 = Float_Type[2]
col3 = Float_Type[2]
Here we read an ASCII file called "phas.dat",
which contains two columns, into a S-lang variable
called dat:
sherpa> dat = readfile("phas.dat");
We then use the print() function to view the contents of
this variable:
sherpa> print(dat);
_filename = phas.dat
_path = /data/analysis/
_filter = NULL
_filetype = 1
_header = NULL
_ncols = 2
_nrows = 128
col1 = Float_Type[128]
col2 = Float_Type[128]
Since readfile() calls readascii() when given an ASCII file, the
results of the following are the same as in the previous example.
sherpa> dat = readfile("phas.dat");
sherpa> print(dat);
_filename = phas.dat
_path = /data/analysis/
_filter = NULL
_filetype = 1
_header = NULL
_ncols = 2
_nrows = 128
col1 = Float_Type[128]
col2 = Float_Type[128]
Here we use the optional arguments to only read in the
second column and skip the first 64 lines of the file.
sherpa> dat = readascii("phas.dat","2",64);
sherpa> print(dat);
_filename = phas.dat
_path = /data/analysis/
_filter = NULL
_filetype = 1
_header = NULL
_ncols = 1
_nrows = 64
col1 = Float_Type[64]
This could also have been achieved by using an array
of integers to list the required columns:
sherpa> dat = readascii("phas.dat",[2],64);
Prior to CIAO 3.0, if a table or image was read in then that
data would be cached so that any attempt to re-read the file
would lead to the original data being returned, even if the
actual file on disk had changed. In CIAO 3.0 this cacheing was
removed for tables, and with the CIAO 3.1 release it has
also been removed for images.
The routines no longer crash when reading a file
within a directory whose name contains
the string "::".
The readascii function is now documented separately
from readfile.
It is now possible to use readfile() - or any of the other
read functions described here - in an if statement.
Prior to CIAO 3.0.2 you could not write something like
if ( NULL == readfile("evt2.fits") ) error("Failed to read file.");
since it would result in a "Stack Underflow" error message.
This means that many routines that use readfile() - such as
Sherpa's load_dataset() and related functions - can also now be
used in an if statement such as:
if ( 1 != load_image(imgname) )
verror( "Unable to load %s as an image.", imgname );
A new field called "_filetype" has been added to the data structure
which describes the type of the file read in.
The contents of the field are described in the
"Format of data structure" section in "ahelp readfile".
|