View Raw SPL
#include
/* delimiters */
extern _rttab;
extern _rtspace;
extern _rtcomma;
extern _rtsemi;
extern _rtother;
extern _rtotherstr;
extern _readt_skip_delimiters;
extern _readt_comma_decimal;
extern _rthex;
extern _rtcsv;
extern _rtlbf;
extern _rtlidt;
extern _rtpvnuml;
extern _cvs_rttab;
extern _cvs_rtspace;
extern _cvs_rtcomma;
extern _cvs_rtsemi;
extern _cvs_rtother;
extern _cvs_rtotherstr;
extern _cvs_readt_skip_delimiters;
extern _cvs_readt_comma_decimal;
extern _cvs_rthex;
extern _rtnanstr;
extern _rtinfstr;
extern _rtwspstr;
static _rttab_save;
static _rtspace_save;
static _rtcomma_save;
static _rtsemi_save;
static _rtother_save;
static _rtotherstr_save;
static _readt_skip_delimiters_save;
static _readt_comma_decimal_save;
/* gui based readt */
rtfname(fname)
{
local orgname, fn, dl, collist, rtcol, rtnaninf;
local comment_line, units_line, func, form;
local rtnanstr, rtinfstr, rtwspstr;
/* set default name to appear in dialog box */
if (argc > 0)
{
/* use input filename */
setvar("_rtfname", fname);
setvar("_rtpickdir", strrev(strfind(pathchar, strrev(_rtfname))));
}
else
{
/* just define the variable */
defvar("_rtfname", "");
}
/* define start directory if it doesn't already exist */
defvar("_rtpickdir", "");
/* define numpts if it doesn't already exist */
defvar("_rtnumpts", "-1");
/* define starting column if it doesn't already exist */
defvar("_rtstartcol", "1");
/* define column list if it doesn't already exist */
defvar("_rtcollist", "-1");
/* define offset if it doesn't already exist */
defvar("_rtoffset", "1");
/* _pickfile_status == 1 if dialog was successful */
setvar("_pickfile_status", 0);
/* define CSV if it doesn't already exist */
defvar("_rtcsv", 0);
/* comma as decimal point */
defvar("_readt_comma_decimal", rtfname_comma_decimal());
/* number of preview lines */
defvar("_rtpvnuml", 1024);
/* remember original name */
orgname = _rtfname;
rtfname_def_delim();
/* default delimiters */
if (_rtcsv)
{
rtfname_def_csv_delim();
}
/* save initial delimiters */
rtfname_save_delim();
/* nan and inf values */
defvar("_rtnanstr", getconf("READT_NA"));
defvar("_rtinfstr", getconf("READT_INF"));
defvar("_rtinfwsp", getconf("READT_WHITESPACE"));
/* default value */
setvar("_rtdefval", castreal(getconf("readt_default_value")));
/* mdy ordering */
defvar("_rtlidt", castint(getconf("locale_idate")));
/* invoke dialog box */
_mf("readt.tab");
/* add -1 to collist if necessary */
if (strlen(strfind("-1", _rtcollist)) == 0)
{
collist = strcat(_rtcollist, ",-1");
}
else
{
collist = _rtcollist;
}
if (_pickfile_status == 1)
{
/*
* dialog was successful
*/
/* set delimiters */
_setrtdl(_rttab, _rtspace, _rtcomma, _rtsemi, _rtother, _rtotherstr);
if (_rtcsv)
{
/* save CSV delimiters */
rtfname_save_csv_delim();
}
/* remember default directory */
setvar("_rtpickdir", strrev(strfind(pathchar, strrev(_rtfname))));
fn = sprintf('"%s"', _rtfname);
/* check if double quote a delimiter */
if (strlen(strfind('"', _readt_delimiters)) > 0)
{
dl = sprintf("'%s'", _readt_delimiters);
}
else
{
dl = sprintf('"%s"', _readt_delimiters);
}
rtcol = (castint(_rtnumcol) > 0) ? castint(_rtnumcol) : (_rtsccol ? -1 : 0);
/* nan and inf template strings */
rtnaninf = "";
rtnanstr = (strlen(_rtnanstr) > 0 && strcmp(_rtnanstr, getconf("READT_NA")) != 0)
? _rtnanstr : "";
rtinfstr = (strlen(_rtinfstr) > 0 && strcmp(_rtinfstr, getconf("READT_INF")) != 0)
? _rtinfstr : "";
rtwspstr = (strlen(_rtwspstr) > 0 && strcmp(_rtwspstr, getconf("READT_WHITESPACE")) != 0)
? _rtwspstr : "";
if (strlen(rtnanstr) > 0)
{
rtnaninf = sprintf('"%s"', rtnanstr);
if (strlen(rtinfstr) > 0)
{
rtnaninf = sprintf('%s, "%s"', rtnaninf, rtinfstr);
if (_readt_comma_decimal)
{
rtnaninf = sprintf('%s, "%s"', rtnaninf, ",");
if (strlen(_rtwspstr) > 0)
{
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
}
else if (strlen(rtwspstr) > 0)
{
rtnaninf = sprintf('%s, ""', rtnaninf);
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
}
else if (_readt_comma_decimal)
{
rtnaninf = sprintf('%s, "", "%s"', rtnaninf, ",");
if (strlen(rtwspstr) > 0)
{
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
}
else if (strlen(rtwspstr) > 0)
{
rtnaninf = sprintf('%s, "", ""', rtnaninf);
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
}
else if (strlen(rtinfstr) > 0)
{
rtnaninf = sprintf('"", "%s"', rtinfstr);
if (_readt_comma_decimal)
{
rtnaninf = sprintf('%s, "%s"', rtnaninf, ",");
if (strlen(rtwspstr) > 0)
{
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
}
else if (strlen(rtwspstr) > 0)
{
rtnaninf = sprintf('%s, ""', rtnaninf);
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
}
else if (_readt_comma_decimal)
{
rtnaninf = '"", "", ","';
if (strlen(_rtwspstr) > 0)
{
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
}
else if (strlen(rtwspstr) > 0)
{
rtnaninf = '"", "", ""';
rtnaninf = rtfname_wsp(rtnaninf, rtwspstr);
}
/* explicit comment and units line */
comment_line = castint(getconf("readt_comment_line"));
units_line = castint(getconf("readt_units_line"));
if (strlen(_rtfname) > 0)
{
if (strlen(rtnaninf) > 0)
{
form = sprintf("readt(%s, %s, %s, %s, %s, %s, %s, %s, %s, %d", fn, _rtoffset, _rtstartcol, collist, _rtnumpts, _rthex, dl, rtnaninf, _readt_skip_delimiters, rtcol);
}
else
{
form = sprintf("readt(%s, %s, %s, %s, %s, %s, %s, %s, %d", fn, _rtoffset, _rtstartcol, collist, _rtnumpts, _rthex, dl, _readt_skip_delimiters, rtcol);
}
endstr = ")";
if (_rtlidt != castint(getconf("locale_idate")))
{
endstr = sprintf(", 1, %d%s", _rtlidt, endstr);
}
if (units_line >= 0 || comment_line >= 0 || strlen(endstr) > 1)
{
endstr = sprintf(", 0, %d, %d%s", comment_line, units_line, endstr);
}
form = form + endstr;
if (_rtlbf)
{
form = sprintf("%s;label(%s)", form, fn);
}
form = sprintf("%s := (%s)", _dwin, form);
eval(form);
}
}
else
{
/* reset to original name */
if (strlen(orgname) > 0)
{
setvar("_rtfname", orgname);
}
}
if (_rtcsv)
{
rtfname_restore_delim();
}
}
rtfname_def_delim()
{
defvar("_rttab", "0");
defvar("_rtspace", "1");
defvar("_rtcomma", "0");
defvar("_rtsemi", "0");
defvar("_rtother", "0");
defvar("_rtotherstr", "");
defvar("_readt_skip_delimiters", "1");
defvar("_readt_comma_decimal", 0);
defvar("_rthex", "0");
}
rtfname_def_csv_delim()
{
defvar("_cvs_rttab", "0");
defvar("_cvs_rtspace", "0");
defvar("_cvs_rtcomma", "1");
defvar("_cvs_rtsemi", "0");
defvar("_cvs_rtother", "0");
defvar("_cvs_rtotherstr", "");
defvar("_cvs_readt_skip_delimiters", "0");
defvar("_cvs_readt_comma_decimal", 0);
defvar("_cvs_rthex", "0");
}
rtfname_save_delim()
{
_rttab_save = _rttab;
_rtspace_save = _rtspace;
_rtcomma_save = _rtcomma;
_rtsemi_save = _rtsemi;
_rtother_save = _rtother;
_rtotherstr_save = _rtotherstr;
_readt_skip_delimiters_save = _readt_skip_delimiters;
_readt_comma_decimal_save = _readt_comma_decimal;
_rthex_save = _rthex;
}
rtfname_set_csv_delim()
{
_rttab = _cvs_rttab;
_rtspace = _cvs_rtspace;
_rtcomma = _cvs_rtcomma;
_rtsemi = _cvs_rtsemi;
_rtother = _cvs_rtother;
_rtotherstr = _cvs_rtotherstr;
_readt_skip_delimiters = _cvs_readt_skip_delimiters;
_readt_comma_decimal = _cvs_readt_comma_decimal;
}
rtfname_save_csv_delim()
{
_cvs_rttab = _rttab;
_cvs_rtspace = _rtspace;
_cvs_rtcomma = _rtcomma;
_cvs_rtsemi = _rtsemi;
_cvs_rtother = _rtother;
_cvs_rtotherstr = _rtotherstr;
_cvs_readt_skip_delimiters = _readt_skip_delimiters;
_cvs_readt_comma_decimal = _readt_comma_decimal;
_cvs_rthex = _rthex;
}
rtfname_restore_delim()
{
_rttab = _rttab_save;
_rtspace = _rtspace_save;
_rtcomma = _rtcomma_save;
_rtsemi = _rtsemi_save;
_rtother = _rtother_save;
_rtotherstr = _rtotherstr_save;
_readt_skip_delimiters = _readt_skip_delimiters_save;
_readt_comma_decimal = _readt_comma_decimal_save;
}
rtfname_setdelim()
{
if (_rtcsv)
{
rtfname_def_csv_delim();
rtfname_set_csv_delim();
}
else
{
rtfname_restore_delim();
}
}
rtfname_filespec()
{
if (_rtcsv)
{
/* CSV, DAT, TXT files */
spec = _rdtopt_cfo;
}
else
{
/* DAT, TXT files */
spec = _rdtopt_tfo;
}
return(spec);
}
rtfname_comma_decimal()
{
local dstr, status = 0;
dstr = getconf("readt_decimal");
if (strlen(dstr) > 0)
{
if (strextract(dstr, 1, 1) == ",")
{
status = 1;
}
}
return(status);
}
rtfname_wsp (rtnaninf, rtwspstr)
{
if (strlen(strfind('"', rtwspstr)) > 0)
{
rtnaninf = sprintf("%s, '%s'", rtnaninf, rtwspstr);
}
else
{
rtnaninf = sprintf('%s, "%s"', rtnaninf, rtwspstr);
}
return(rtnaninf);
}