The table columns are filled from a file containing the data values
separated by a separator (optionally followed by whitespace). The
default separator is a comma. Non-given values default to 0, False, or
blank string (depending on data type). A value is not given between 2
consecutive separators or if less values are given than needed.
One line per table row should be given.
The following two header lines define the columns in the table:
There are two forms of the readAsciiTable function:
Create a table with name as given by tableName.
If autoHeader==True, the format is automatically derived from the
first data line. It can recognize integer, double, and String types.
The columns will be named column1, column2, etc..
If the autoShape argument is given with 1 or more axes, all values are
treated as a single column with the given shape. Note that one of the
can have length 0 indicating a variable shaped array.
If autoHeader==False, the layout of the table has to be defined in
the first 2 lines of the input file. The remaining lines in the
input file contain the data.
When the tableDescName is not blank, the table description will
be stored in a table description file with the given name.
The separator gives the character separating the values. The default
is a blank. Note that irrespective of the separator, blanks between
values are always ignored. A string value has to be enclosed in
double quotes if it has to contain blanks or the separator value.
Header and data lines starting with the regular expression given in the
commentMarker are ignored. By default no comment marker is present.
E.g. "#" ignores all lines starting with the #-sign.
" *#" does the same, but the lines to ignore can start with whitespace.
The first and last line argument give the 1-relative number of the
first and last line to read from the file. firstLine <= 0 is the
same as 1. lastLine <= 0 means until end-of-file.
Note that lines matching the comment marker are also counted.
This form reads TWO Ascii files. The first file may contain
keywords and their values as well as the two lines described above for
the names and type of variables. The second file is intended for data only.
When the tableDescName is not blank, the table description will
be stored in a table description file with the given name.
The separator gives the character separating the values. The default
is a blank. Note that irrespective of the separator, blanks between
values are always ignored. A string value has to be enclosed in
double quotes if it has to contain blanks or the separator value.
Header and data lines starting with the regular expression given in the
commentMarker are ignored. By default no comment marker is present.
E.g. "#" ignores all lines starting with the #-sign.
" *#" does the same, but the lines to ignore can start with whitespace.
The first and last line argument give the 1-relative number of the
first and last line to read from the data file. firstLine <= 0 is the
same as 1. lastLine <= 0 means until end-of-file.
Note that lines matching the comment marker are also counted.
Do the actual run.
Get the next line. Skip lines to be ignored.
It returns False when no more lines are available.
Get the next part of the line using the separator as delimiter.
Leading blanks are ignored.
Derive the types from the values in the first data line.
Turn the string into a Bool value.
Empty string, value 0 and any value starting with f, F, n or N are False.
Handle a keyword set.
Get the shape and type from the type string.
Get the next scalar value with the given type from string1.
Handle the next scalar with the given type from the data line and
put it into the table column.
Get the next array with the given type from string1.
It returns the shape (for variable shaped arrays).
Get the next array with the given type from the data line and
put it into the table column.
Synopsis
Global functions to fill a table from an Ascii file.
If the autoHeader argument is True, the column definition
lines should not be given. It recognizes the types from the first data
line. It gives the names 'column0', etc. to the columns.
It can recognize integer, double, and string types.
It is possible to give a shape argument which has the same function
as the shape values discussed above.
The type can optionally be followed by one or more positive numbers
(separated by commas without whitespace) indicating that the column
contains an array. The numbers give the shape of the array.
E.g. D2,4 defines a column containing arrays with
shape [2,4]. It "consumes" 8 numbers in each input data line.
The last column can contain a 0 in one of the shape numbers.
It indicates that the arrays are variable shaped; it "consumes"
all remaining numbers in each input data line. If needed,
the arrays are filled with default values (0, False, or blank).
E.g. I0 indicates a variable shaped vector.
I0,4 with a line with remaining input
1 2 3 4 5 6 7 8 9 results in an array with shape [3,4]
(filled with with 3 zeroes).
After the keywords definitions, the two column definition lines
should follow (unless autoHeader=True is given).
For example:
.keywords
KEYI I 10
KEYIV I 11 12 13 14
KEYF R 1.2
KEYFV R -3.2 0 5.6
KEYD D 1.23456789
KEYDV D 1 2 3 4 5 6 7 8 9
KEYX X -1.5 -3
KEYXC X 0 1 2 3 4 5 6 7 8 9
KEYZ Z -3 -1.5
KEYZV Z 0 0.1 0.2 0.3 0.4 0.5
KEYS A "1 2 3 4 5"
KEYSV A " 1 2 " "AAA" BBB bbb CCc C "@#$%^&*()"
.endkeywords
.keywords COLDX
IKEYS A "coldx ikey"
DKEYS A "coldx dkey"
.endkeywords
COLI COLF COLD COLX COLZ COLS
I R D X Z A
defines a table with 12 table keywords (of which 6 contain vector
values), 2 keywords for column COLDX, and and 6 columns.
The number of rows is determined by the number of
lines in the second input file.
Example
readAsciiTable ("file.in", "", "table.test");
creates a table with name table.test from the text file
file.in. The text file could look like:
COLI COLF COLD COLX COLZ COLS
I R D X Z A
1 1.1 1.11 1.12 1.13 1.14 1.15 Str1
10 11 12 13 14 15 16 String17
resulting in a table with 6 columns and 2 rows.
Member Description
String readAsciiTable (const String& filein, const String& tableDescName, const String& tableName, Bool autoHeader = False, Char separator = ' ', const String& commentMarkerRegex = "", Int firstLine = 1, Int lastLine = -1, const separator& autoShape = separator())
It returns a string containing the format of the columns in
the form COL1=R, COL2=D, ...
String readAsciiTable (const String& headerFile, const String& dataFile, const String& tableDescName, const String& tablename, Char separator = ' ', const String& commentMarkerRegex = "", Int firstLine = 1, Int lastLine = -1)
String readAsciiTable (const String& headerFile, const String& dataFile, const String& tableDescName, const char* tablename, Char separator = ' ', const String& commentMarkerRegex = "", Int firstLine = 1, Int lastLine = -1)
It returns a string containing the format of the columns in
the form COL1=R, COL2=D, ...
class ReadAsciiTable
Types
enum RATType
Interface
Description
Synopsis
This class contains static functions as helpers for readAsciiTable.
Member Description
static String run (const String& headerfile, const String& filein, const String& tableproto, const String& tablename, Bool autoHeader, const IPosition& autoShape, Char separator, const String& commentMarkerRegex, Int firstLine, Int lastLine)
Run the readAsciiTable.
enum RATType
Define types.
static String doRun (const String& headerfile, const String& filein, const String& tableproto, const String& tablename, Bool autoHeader, const IPosition& autoShape, Char separator, Bool testComment, const Regex& commentMarker, Int firstLine, Int lastLine)
static Bool getLine (ifstream& file, Int& lineNumber, char* line, Int lineSize, Bool testComment, const Regex& commentMarker, Int firstLine, Int lastLine)
static Int getNext (const Char* string, Int strlen, Char* result, Int& at, Char separator)
static void getTypes (const IPosition& shape, const Char* in, Int leng, Char* string1, Char* string2, Char separator)
static Bool makeBool (const String& str)
static void handleKeyset (Int lineSize, char* string1, char* first, char* second, TableRecord& keysets, LogIO& logger, const String& fileName, ifstream& jFile, Int& lineNumber, Char separator, Bool testComment, const Regex& commentMarker, Int firstLine, Int lastLine)
static Int getTypeShape (const String& typestr, IPosition& shape, Int& type)
static Bool getValue (char* string1, Int lineSize, char* first, Int& at1, Char separator, Int type, void* value)
static void handleScalar (char* string1, Int lineSize, char* first, Int& at1, Char separator, Int type, TableColumn& tabcol, uInt rownr)
static IPosition getArray (char* string1, Int lineSize, char* first, Int& at1, Char separator, const IPosition& shape, Int varAxis, Int type, void* valueBlock)
static void handleArray (char* string1, Int lineSize, char* first, Int& at1, Char separator, const IPosition& shape, Int varAxis, Int type, TableColumn& tabcol, uInt rownr)