The Tcl database import library module has the file name iexlib.tcl. This module allows ASCII data in either fixed field length or variable field delimited to be imported into a Bbuuzzb table.
This module is only sourceed with applications that require the import facility. At the moment, this module provides for import only. At some future date, this module will be enhanced to also provide for data export from Bbuuzzb tables into ASCII files.
This module manages the iex_spec array. This array contains a series of import specifications loaded from an import template.
Here is a list of functions in this module:
This module requires the following modules:
The following modules are required along with this module:
ASCII data import is accomplished using an import profile or template (hereafter referred to as the profile). The profile is a Bbuuzzb record in the iex.config table. The profile field layout is as follows:
Element | Description |
---|---|
1 | profile name: usually containing name of user program (any length) |
2 | comment: any length |
3 | operation code: i for import, x for export (no export currently) |
4 | input ASCII format: f for fixed field or field delimiter otherwise |
5 | array of specs: each complete spec is a subfield containing the following subsubfields: |
5,*,1 | source field: field number for delimited or start,chars for fixed, note that start byte is zero based |
5,*,2 | conversion: one of:
|
5,*,3 | destination field: must be a bbuuzzb field, subfield or subsubfield in the form f[,sf][,ssf], zero may be used in any part to indicate an append (append not recommended) |
6 | auto record locate/create switch: see below |
7 | bbuuzzb field to match (optional): if present, an attempt will be made to locate an existing matching record |
8 | ascii null field signature (optional): if present, these chars will denote an empty input ascii field |
There must be at least six fields present in the iex profile record. Notice that field five is a two-dimensional array of import specifications. Each import spec consists of the source field (from the ASCII file) spec, a conversion spec and a destination field (bbuuzzb field, subfield or subsubfield) spec.
This module may be used in a couple of different ways. To import an entire file at once without any special processing, call the iexlib_import procedure (or use the iex application). You also may import one ascii line at a time with any processing you like by first using the procedure iexlib_start to load the profile followed by the procedure iexlib_import_do_line for each ascii input line and iexlib_stop when all lines are completed.
The procedure iexlib_import is a good example of manually controlling the import.
The auto record locate/create switch is used in conjunction with the match field. If the auto record switch is off(0), the caller is assumed to have already set the bbuuzzb file position and no automatic record location or creation will take place. If the auto switch is on(1) and there is a match field present, an attempt will be made to find the matching bbuuzzb record before the import of that ascii line takes place. If the find of the bbuuzzb record fails, a new output record will be created. If the auto switch is on and there is no match field present, a new bbuuzzb output record will be created for each ascii input line. As a guideline, set the auto switch high when you will be using the procedure iexlib_import to import the entire ascii file at once. Set the auto switch low when you will be manually controlling the import. When the auto record switch is low, any value in the match field will be ignored.
Declaration : proc iexlib_import {profile_name in_file_name out_table_name} Parameters : Name : profile_name Type : string Description : name of profile/template (stored in field one of the iex.config record) Name : in_file_name Type : string Description : path and name of input ASCII file Name : out_table_name Type : string Description : name of output bbuuzzb table Returns : dbeng code
This procedure will perform a regular (no special processing) import of the input ASCII file into the output bbuuzzb table. All input records will be processed. A new output record or a re-write of an existing bbuuzzb record will take place for each input record depending on the status of the profile auto record locate/create switch.
Declaration : proc iexlib_start {profile_name} Parameters : Name : profile_name Type : string Description : name of profile/template (stored in field one of the iex.config record) Returns : dbeng code
This procedure will obtain the iex profile record from the profile_name and load all module globals and the iex_spec array. This procedure should be used when manual control over the import process is desired.
Declaration : proc iexlib_stop {}
This procedure will delete the iex_spec array and set the module globals to zero/null. This procedure should only be called at the end of the import process when using manual control (import started with iexlib_start).
Declaration : proc iexlib_active {} Returns : TRUE if active profile loaded, FALSE otherwise
This procedure will determine whether there is a current iex profile loaded into the iex_spec array.
Declaration : proc iexlib_dump {}
This procedure will output the contents of the global data and the iex_spec array to the logging manger. Note that logging manager must already be turned on.
Declaration : proc iexlib_import_do_line {out_tid line} Parameters : Name : out_tid Type : positive integer Description : output table tid Name : line Type : string Description : input ASCII line Returns : dbeng code
This procedure will import the input ASCII line from the input ascii file into the bbuuzzb output table. This procedure should be called once per ASCII input line if the import is under manual control.
Declaration : proc iexlib_config_set_sd {is_source tid rsf} Parameters : Name : is_source Type : boolean flag Description : source field flag Name : tid Type : positive integer Description : iex profile input table tid Name : rsf Type : positive integer Description : input subfield Returns : dbeng code
This procedure will load the source or destination field specification from the iex profile record into the iex_spec array.
Declaration : proc iexlib_config_set_conv {tid rsf} Parameters : Name : tid Type : positive integer Description : iex profile input table tid Name : rsf Type : positive integer Description : input subfield Returns : dbeng code
This procedure will load the conversion spec from the iex profile record into the iex_spec array.
Declaration : proc iexlib_config_get_sd {fdat f sf ssf} Parameters : Name : fdat Type : string Description : source or destination field spec from iex profile data Name : f Type : positive integer Description : returned field number Name : sf Type : positive integer Description : returned subfield number Name : ssf Type : positive integer Description : returned subsubfield number Returns : dbeng code
This procedure will parse a source or destination field spec into its component parts.
Declaration : proc iexlib_import_get_ascii_field {line outfield spec} Parameters : Name : line Type : string Description : input ASCII line Name : outfield Type : string Description : output raw, trimed data Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will obtain a field within the ascii import line. The field data is retrieved based on whether the input format is fixed or delimited (contained in the globals). The iex_spec array element number must point to a valid iex_spec element and the field will be obtained from this spec and placed into output raw, trimed data.
Declaration : proc iexlib_import_match {tid line} Parameters : Name : tid Type : positive integer Description : output table tid Name : line Type : string Description : input ASCII line Returns : dbeng code
This procedure will attempt to match the input ascii field with bbuuzzb data by applying the specified conversion to the input ascii field and attempting to locate a bbuuzzb record with the matching data.
Declaration : proc iexlib_import_do_wind_dir {tid ifield spec} Parameters : Name : tid Type : positive integer Description : output table tid Name : ifield Type : string Description : input ASCII wind direction (W,NE,SSW etc) Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will convert the input wind direction from alpha to degrees (fxp number with a scale of one) and place the data into the bbuuzzb record according to the iex_spec array element number specification.
Declaration : proc iexlib_import_do_time {tid ifield spec} Parameters : Name : tid Type : positive integer Description : output table tid Name : ifield Type : string Description : input ASCII time (hh:mm[a|p]) Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will convert the input ASCII time to 24 hour notation (with no colon) and place the data into a bbuuzzb record according to the iex_spec array element number specification.
Declaration : proc iexlib_import_do_fxp {tid ifield spec} Parameters : Name : tid Type : positive integer Description : output table tid Name : ifield Type : string Description : input ASCII floating-point number Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will convert the input ASCII floating-point number and place the data into the bbuuzzb record according to the iex_spec array element number specification. The result data is in fxp format.
Declaration : proc iexlib_import_do_int {tid ifield spec} Parameters : Name : tid Type : positive integer Description : output table tid Name : ifield Type : string Description : input ASCII integer Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will convert the input ASCII integer and place the data into the bbuuzzb record according to the iex_spec array element number specification.
Declaration : proc iexlib_import_do_pint {tid ifield spec} Parameters : Name : tid Type : positive integer Description : output table tid Name : ifield Type : string Description : input ASCII integer Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will convert the input ASCII integer plus a constant and place the data into the bbuuzzb record according to the iex_spec array element number specification.
Declaration : proc iexlib_import_do_month {tid ifield spec} Parameters : Name : tid Type : positive integer Description : output table tid Name : ifield Type : string Description : input ASCII month name (3 char. abbr.) Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will convert the input ASCII month name to a month number (base 1) and place the data into a bbuuzzb record according to the iex_spec array element number specification.
Declaration : proc iexlib_import_conv_wind_dir {ifield spec ofield} Parameters : Name : ifield Type : string Description : input ASCII wind direction (W,SE,NNW etc) Name : spec Type : positive integer Description : iex_spec array element number Name : ofield Type : fxp Description : output ASCII wind direction in degrees (fxp, scale 1) Returns : TRUE upon success, FALSE otherwise
This procedure will convert the input ASCII wind direction according to the iex_spec array element number specification. This procedure will load the result into the output ASCII wind direction upon success. This procedure is used only to match records from iexlib_import_match.
Declaration : proc iexlib_import_conv_time {ifield ofield} Parameters : Name : ifield Type : string Description : input ASCII time (hh:mm[a|p]) Name : ofield Type : string Description : output ASCII time (hhmm, no colon) Returns : TRUE upon success, FALSE otherwise
This procedure will convert the input ASCII time. Upon success, the output ASCII time will be loaded with the result.
Declaration : proc iexlib_import_conv_int {ifield spec ofield} Parameters : Name : ifield Type : string Description : input ASCII integer Name : spec Type : positive integer Description : iex_spec array element number Name : ofield Type : string Description : output ASCII integer Returns : TRUE upon success, FALSE otherwise
This procedure will convert the input ASCII integer according to the iex_spec array element number specification. This procedure will load the result into the output ASCII integer upon success.
Declaration : proc iexlib_import_conv_pint (ifield spec ofield} Parameters : Name : ifield Type : string Description : input ASCII integer Name : spec Type : positive integer Description : iex_spec array element number Name : ofield Type : string Description : output ASCII integer Returns : TRUE upon success, FALSE otherwise
This procedure will convert a plus integer, which is an integer plus a constant according to the iex_spec array element number specification. This procedure will load the result into the output ASCII integer upon success.
Declaration : proc iexlib_import_conv_fxp {ifield spec ofield} Parameters : Name : ifield Type : string Description : input ASCII floating-point number Name : spec Type : positive integer Description : iex_spec array element number Name : ofield Type : string Description : output ASCII fxp number Returns : TRUE upon success, FALSE otherwise
This procedure will convert the input ASCII floating-point number according to the iex_spec array element number specification. This procedure will load the result into the output ASCII fxp number upon success. Note that the result is in bbuuzzb fxp format (no decimal and padded on the right with zeros to the desired precision or scale). This procedure is used only to match records with iexlib_import_match.
Declaration : proc iexlib_import_conv_month {ifield ofield} Parameters : Name : ifield Type : string Description : input ASCII month name (3 chars.) Name : ofield Type : string Description : output ASCII month number Returns : TRUE upon success, FALSE otherwise
This procedure will convert the input ASCII month name to a month number zero padded to two digits (base one). This function will load the result into the output ASCII month number upon success.
Declaration : proc iexlib_import_put_fxp {out_tid dat spec} Parameters : Name : out_tid Type : positive integer Description : output table tid Name : dat Type : fxp number Description : input fxp number Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will place the input fxp number into a bbuuzzb record according to the iex_spec array element number specification.
Declaration : proc iexlib_import_put_data {out_tid dat spec} Parameters : Name : out_tid Type : positive integer Description : output table tid Name : dat Type : string Description : input data Name : spec Type : positive integer Description : iex_spec array element number Returns : dbeng code
This procedure will place the input data into a bbuuzzb record according to the iex_spec array element number specification.
Declaration : proc iexlib_import_conv_get_token {keywrd} Parameters : Name : keywrd Type : string Description : input conversion keyword Returns : keyword token ID
This procedure will translate the input conversion keyword to a keyword token ID.