feat(skills): add tsl api reference skill

Bundle the TSL API index and markdown references under the skill, route TSL docs to use it, and update the codegen index generator to maintain the bundled data.
This commit is contained in:
csh
2026-07-07 16:36:15 +08:00
parent 4cd6b9410f
commit e1f7ce052c
267 changed files with 185908 additions and 11996 deletions
@@ -0,0 +1,8 @@
# 系统
函数数:49
| 叶子 | 文件 | 函数数 |
| --- | --- | ---: |
| 系统 / 平台与客户端 | [系统 / 平台与客户端](platform.md) | 5 |
| 系统 / 运行时 | [系统 / 运行时](runtime.md) | 44 |
@@ -0,0 +1,41 @@
# Builtin - 系统 / 平台与客户端
## `userName()`
返回当前的用户。
返回:string
## `functionType()`
当前运行的函数的类型。即返回当前函数是公用函数,还是用户函数。
返回:integer
## `functionName()`
当前运行的函数的名称
返回:string
## `userConfig(section, ret_type)`
返回用户的配置信息,Section为配置名,RetType用于指定返回的类型,0为字符串,1为数字,2为日期类型。注:此函数为特殊用途。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `section` | string | 字符串,配置名。 |
| `ret_type` | integer | 整数,返回类型。 |
返回:real|string|tdatetime
## `sudo(uid, exp)`
以UID指定的用户执行EXP表达式,该EXP为隐式表达式,例如SUDO(“system”,DoSomeThing()),如用户需要用显式的表达式,采用SUDO(UID,Eval(Exp))即可。SUDO和User不一样,SUDO需要有权限,而且SUDO是完全以指定用户来执行,访问的数据资源等均以指定的UID来运行。与SetUID不一样的地方是SUDO执行完EXP后用户ID便恢复成原始的ID。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `uid` | string | 字符串,用户名。 |
| `exp` | expression | 表达式。 |
返回:any
@@ -0,0 +1,863 @@
# Builtin - 系统 / 运行时
## 运行时
### `setPrecision(number, precision)`
从指定精度四舍五入截断小数点位数,返回number的保留小数点Precision位后的值
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `number` | real | 实数/实数数组。 |
| `precision` | integer | 整数,目的是为了截取实数后面小数点的位数。 |
返回:real
#### 示例
```tsl
return setPrecision(123.4567, 3); // 返回值为保留3位小数点后的实数:123.457。
```
### `toStm(v, gtype, stm_type, p_n)`
转换成为STM流数据。可以通过stmType参数控制是否转换为新流模式或超大流新流模式,新的stm流占用空间更少,访问效率更高。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `v` | | 任意类型数据 |
| `gtype` | integer | 可选参数,图型等特殊类型 ,默认为0 |
| `stm_type` | integer | 可选参数,流模式,0:普通模式;1:新流模式;2:超极大流的紧缩模式;默认为0。其中,超大流模式能处理超大结果集。 |
| `p_n` | integer | 可选参数,精度,默认为-1,全精度 |
返回:binary
#### 示例
```tsl
return toStm(array(1, 23, 4, 5, 6, 7,)); // 返回以.stm为后缀名的二进制文件。
// 可选参数的应用
t := rand(4, 5);
s := toStm(t, 0, 1, 2); // 用新流模式,且保留两位小数
return stm(s);
// 返回如下:
```
### `toStn(v, n)`
转换成为STN字符串。小数位四舍五入,尾数是五就进一。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `v` | any | 任意类型数据 |
| `n` | integer | 整型,保留小数点后的位数,可选参数。只对v是小数时且v的小数数位比N大有效。 |
返回:string
#### 示例
范例一:
```tsl
return toStn(12345); // 返回值为字符串:’12345’。
```
范例二:
```tsl
return toStn(1.2345, 2); // 返回值为字符串:’1.23’。
```
### `exportCsv(data, csv_str, include_index, include_header)`
将指定数组Data转换为csv格式字符串并存储在csvStr参数中。仅支持一维及二维数组的转换。和ExportCsvne的区别:在处理浮点数据时,ExportCsv的结果会输出为1E15等格式。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `data` | array | 数组类型,要转换成csv格式字符串的数组。 |
| `csv_str` | string | 字符串类型,转换成功的csv格式字符串(输出值)。 |
| `include_index` | bool | 可选参数,布尔类型。转换结果是否包含数组下标信息。默认为False。 |
| `include_header` | bool | 可选参数,布尔类型。转换结果是否包含字段头部信息。默认为True。 |
返回:bool
#### 示例
范例01:一维数组转换成csv格式字符串(含大数量级数据)
```tsl
data := array(1, 2, "3", "A", 9, 1E15);
ret := exportCsv(data, s);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
范例02:二维数组转换成csv格式字符串
```tsl
data := array((2, 5, 0), (3, 2, 1), (4, 7, 2));
ret := exportCsv(data, s);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
范例03:转换成csv格式字符串,结果包含数组下标信息
```tsl
data := array("A": (2, 5, 0), "B": (3, 2, 1), "C": (4, 7, 2));
ret := exportCsv(data, s, 1);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
范例04:转换成csv格式字符串,结果不包含字段头部信息
```tsl
data := array((2, 5, 0), (3, 2, 1), (4, 7, 2));
ret := exportCsv(data, s, 0, 0);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
### `setProfiler(flag)`
设置需要记录的优化信息(当设置了记录优化信息的时候,运行速度可能会比正常运行慢很多)并返回设置前的状态值,如果设置了记录优化信息,在平台运行的模型结束的时候会在终端打开优化信息的窗口,用户也可以调用GetProfilerInfo来手动获得优化信息。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `flag` | | 整数,可省略,若省略则仅返回状态值而不设置。设置需要记录的优化信息,由一个四位二进制数组成,即以下几种常见组合说明: 取值 说明 |
返回:integer
#### 示例
范例011+2+4的优化信息返回
```tsl
setProfiler(7);
a := array();
setSysParam(PN_Stock(), 'SH000001');
for i := 20000101t to 20200721T do
begin
if not spec(isTradeDay(i), 'SH000001') then continue;
echo specDate(close(), i);
end
return 1;
// 结果:times为函数运行的次数,seconds为运行时间,op为指令的优化信息,type为函数类型。
```
范例02:内置对象的优化信息返回
```tsl
setProfiler(8);
o := new TStringList();
o.text := "Tinysoft"; // 给对象的属性赋值
o.delimited_text := 'A=abc,B=123,C=abc,F=996,E=abd';
o.add("G=666");
return 1;
// 优化信息如:
```
### `randomfrom(avalues)`
返回一个随机的数组元素,这个数组是由参数Avalue传递进来的。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `avalues` | array of any | 数组名称,可以是整数数组或实数数组 |
返回:any
#### 示例
```tsl
a := array('a', 'b', 'c', 'd', 'e', 'f');
return randomFrom(a);
// 返回值为随机返回A字符串中一个字符:’b’。
```
### `getSysParams()`
取出所有系统参数的值。
返回:array
### `loggerDebug(msg)`
打印带执行节点的调试信息
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `msg` | string | 任意数据类型,如果是字符串原样打印,如果非字符串按tostn打印 |
返回:any
### `loggerInfo(msg)`
打印带执行节点的提示信息
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `msg` | string | 任意数据类型,如果是字符串原样打印,如果非字符串按tostn打印 |
返回:any
### `loggerWarning(msg)`
打印带执行节点的调试信息
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `msg` | any | 任意数据类型,如果是字符串原样打印,如果非字符串按tostn打印 |
返回:any
### `loggerInfo2(p1, p2, p3, pn)`
打印带执行节点的提示信息
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `p1` | any | 第一个参数的内容 |
| `p2` | any | 第二个参数的内容,可省略 |
| `p3` | any | 第三个参数的内容,可省略 |
| `pn` | any | 第N个参数的内容,可省略 |
返回:any
### `spUserSysParam2()`
用户自定义函数教学范例,获得当前系统参数
返回:string
### `spSetSysParam1()`
设置系统参数教学范例,使用缺省系统参数,返回股票.基本信息
返回:any
### `spSetSysParam2()`
设置系统参数教学范例,指定系统参数(当前为SH600718),返回股票.基本信息
返回:any
### `ifThen3(left, right, r1, r2, r3)`
比较left与Right大小,若Left大,则返回r1;若相等,返回r2;若Right大,返回r3。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `left` | real | 实数 |
| `right` | real | 实数 |
| `r1` | expr | 表达式 |
| `r2` | expr | 表达式 |
| `r3` | expr | 表达式 |
返回:expr
#### 示例
```tsl
return ifThen3(1, 2, '左大', '相等', '右大');
// 返回:’右大’
```
### `safeEval(exp)`
表达式求值
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `exp` | texpression | 表达式类型 |
返回:any
### `tsAppServerName()`
返回平台设置的名字,如果没有设置,默认是ip:进程路径。
返回:string
#### 示例
```tsl
return tsAppServerName();
// 结果:192.168.101.26:z:\server\bin\exec64.exe
```
### `call(func_name, p1, pn)`
根据名称或者函数指针调用指定的函数,后面带的参数将自动送入该函数。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `func_name` | string\|tfunction | 如果是字符串,表示函数的名称,也可以是函数类型。 |
| `p1` | any | 整数,参数1 |
| `pn` | any | 整数,参数N。 |
返回:any
#### 示例
```tsl
// 采用字符串方式来调用函数
return call("IntTodate", 20140101);
// 返回41640
// 采用函数指针来调用函数
f := ThisFunction(int_to_date);
return call(f, 20140101);
// 返回41640
```
### `toXml(v)`
转换成为XML字符串。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `v` | any | 任意类型 |
返回:string
#### 示例
```tsl
return toXml('this is XML document');
{返回值为字符串:
<?xml version="1.0" encoding="GB2312"?>
<TSXML Copyright="Generated by ShenZhen Tinysoft Corp,Ltd. All rights reserved." TYPE="STRING" VALUE="this is XML document"/>}
// 差异说明
// 仅windows中支持,Linux中暂不支持。
```
### `xml(v)`
把XML串转换为任意类型。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `v` | string | 字符串,XML串 |
返回:any
#### 示例
```tsl
return xml('<?xml version="1.0" encoding="GB2312"?>
<TSXML Copyright="Generated by ShenZhen Tinysoft Corp,Ltd. All rights reserved." type="STRING" VALUE="this is XML document"/>');
// 返回值为字符串:’this is a document’。
// 差异说明
// 仅windows中支持,Linux中暂不支持。
```
### `exportCsvne(data, csv_str, include_index, include_header)`
将指定数组Data转换为csv格式字符串并存储在csvStr参数中。仅支持一维及二维数组的转换。和ExportCsv的区别:在处理浮点数据时,ExportCsvne的结果不会输出为1E15等格式。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `data` | array | |
| `csv_str` | string | |
| `include_index` | | |
| `include_header` | bool | |
返回:bool
#### 示例
范例01:一维数组转换成csv格式字符串(含大数量级数据)
```tsl
data := array(1, 2, "3", "A", 9, 1E15);
ret := exportCsvne(data, s);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
范例02:二维数组转换成csv格式字符串
```tsl
data := array((2, 5, 0), (3, 2, 1), (4, 7, 2));
ret := exportCsvne(data, s);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
范例03:转换成csv格式字符串,结果包含数组下标信息
```tsl
data := array("A": (2, 5, 0), "B": (3, 2, 1), "C": (4, 7, 2));
ret := exportCsvne(data, s, 1);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
范例04:转换成csv格式字符串,结果不包含字段头部信息
```tsl
data := array((2, 5, 0), (3, 2, 1), (4, 7, 2));
ret := exportCsvne(data, s, 0, 0);
if ret then return s;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
### `callInArray(func_name, param_content)`
根据名称或者函数指针调用指定的函数,将参数放入一个数组中送入该函数,不支持变参。另外,天软的函数指针可以用thisfunction()获得。该函数与call函数功能类似,注意两个函数设置参数的区别。Call函数直接列举,CallInArray函数将调用的函数的参数放在Array中。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `func_name` | string\|tfunction | 如果是字符串,表示函数名称,也可以是函数类型。 |
| `param_content` | array | 数组类型,第一个参数放在ParamContent[0],第二个放在ParamContent[1]以此类推。 |
返回:any
#### 示例
范例1:根据函数名称调用,第一个参数为函数名称
```tsl
return callInArray("StrToIntDef", array('1234', 999));
// 返回1234
```
范例2:调用匿名函数,第一个参数是指向匿名函数的变量
```tsl
{func1是一个变量,我们将一个函数体赋值给这个变量,变量型函数我们称为匿名函数,匿名函数的语句段放在某个函数体内,调用的时候,需使用call或callinarray函数进行调用。
这个例子中,a是一个变量,当a在func1匿名函数中,并在匿名函数体重修改a,使a := a+10; ,但执行完匿名函数后,a参数的值是不变的,即不支持变参,所以最后返回a为10,b为20。
callinarray在这里执行匿名函数func1时,其参数不需要跟在func1之后。}
a := 10;
func1 := function(a) begin
a := a+10;
return a;
end;
b := callInArray(func1, array(a));
return array(a, b);
// array(10,20)
```
范例3:根据函数指针调用,第一个参数为函数指针
```tsl
{thisfunction()函数可获得函数指针;由于调用的是stockzf3,该函数没有参数,因此,callinarray的第二个参数给空数组}
setSysParam(pn_stock(), 'SH000001');
return callInArray(thisfunction(stockzf3), array());
```
范例04:调用时指定参数传参
```tsl
function CCC(a, b, c, d); // 展示各参数的值
begin
echo "A:", a, " B:", b, " C:", c, " D:", d;
return b;
end;
// 调用
return callInArray("CCC", array("b": 1, "d": 4));
// 返回:1
// 打印结果:A: <NIL> B: 1 C: <NIL> D: 40
// 解析:callINArray在通过数组传参数时,可以通过指定下标的方式给指定参数进行传参,下标对应函数定义中的变量名。
// 上面示例中,只对参数b与d进行了传参,其它两参数没有进行传值,所以是nil。
```
### `doubleVariableExecute(arr, sys_name, time_arr, exp)`
计算指定系统参数,指定时间序列下的指标表达式的值
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `arr` | integer | 二维数组,设置的系统参数的值 |
| `sys_name` | integer | 字符串,指定的系统参数名 |
| `time_arr` | integer | 二维数组,需要计算的指定时间 |
| `exp` | texpression | 表达式,指标表达式 |
返回:array
#### 示例
```tsl
stocks := array(getBk('上证50'));
timer := marketTradeDayQk(20220101T, 20221211T);
return doubleVariableExecute(stocks, pn_Stock(), timer, @close());
// 返回: (部分结果截图)
```
### `multipleExecute(exp)`
表达式求值
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `exp` | texpression | 表达式 |
返回:array
### `singleVariableExecute(arr, sys_name, exp)`
设置系统变量SysName的值为Arr中的元素,执行表达式exp,将表达式的值放到数组Arr中。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `arr` | array | 数组, |
| `sys_name` | string | 字符串,指定系统参数名称 |
| `exp` | texpression | 表达式 |
返回:array
#### 示例
```tsl
// Arr中存储的是代码,获取2019年3月1日,Arr中所有代码的收盘价
arr := array('SZ000001', 'SZ000002');
return singleVariableExecute(arr, pn_stock(), @close());
```
### `safeSetSysParam(systype, value)`
设置系统参数。主要是将value的值转化为正确的对应于systype数据类型,再通过setsysparam进行设置setysparam(systype,value),保证系统参数设置成功。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `systype` | string | 字符串,系统参数名称 |
| `value` | real | 实数或字符串,系统参数值 |
返回:integer
### `tsAppServer()`
获得当前运行的模型所在的运算服务器的标识。
返回:string
#### 示例
```tsl
a := rand(10, 10);
return tsAppServer();
// 结果:192.168.101.45:3328(Z:\server\bin5)
```
### `dupValue(value)`
返回一份value的复制值,一般无需要使用,特别用于不需要变参的函数调用。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `value` | any | 任意类型,被复制的数据 |
返回:any
#### 示例
```tsl
// 主函数
function test1();
begin
a := 1;
b := 2;
c := 3;
d := test2(dupValue (a), b, c);
return array(a, b, c, d);
end;
// 返回array(1,20,3,33)
// 被调用函数
function test2(a, b, c);
begin
a := 10;
b := 20;
return a+b+c;
end;
// 由test1执行出来的结果可以知道,a变量,由于使用了dupValue复制值,虽然在子函数test2中改变了其值,但在主函数中的a变量仍然没变。而b变量则发生了改变。
```
### `ifThen(avalue, atrue, a_false)`
如果Avalue值为真,返回参数Atrue,否则返回参数Afalse
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `avalue` | bool | 布尔类型,判定条件 |
| `atrue` | any | 任意类型,Avalue为真返回值 |
| `a_false` | any | 任意类型,Avalue为假返回值 |
返回:any
#### 示例
```tsl
a := 1;
b := 2;
return ifThen(a>b, a, b);
// 返回:2。
```
### `integer(value)`
强制成整数,类型转换,对有些必需要指定类型的函数有用,如format
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `value` | real | 实数或整数 |
返回:integer
#### 示例
```tsl
return integer(123.456); // 返回值为整型数据:123。
```
### `int64(value)`
强制成整数,类型转换,对有些必需要指定类型的函数有用,如format
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `value` | real | 实数或整数 |
返回:int64
#### 示例
```tsl
return int64(123); // 返回值为64位整型数据:123。
```
### `real(value)`
强制为实数,类型转换,对有些必需要指定类型的函数有用,如format
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `value` | real | 实数或整数 |
返回:real
#### 示例
```tsl
return real(123); // 返回值为实数数据:123.00
```
### `wideString(value)`
将字符串转为Unicode字符串,或者强制让二进制为Unicode字符串。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `value` | string\|binary\|widestring | 字符串或者二进制数据 |
返回:widestring
#### 示例
```tsl
return wideString('abcd');
// 返回值为Unicode字符串:Labcd’。
```
### `binary(value)`
强制把字符串或者Unicode字符串转化为二进制流,对有些必需要指定类型的函数有用
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `value` | string\|binary\|widestring | 字符串或者二进制数据 |
返回:binary
#### 示例
```tsl
return binary('111111'); // 返回值为二进制流。
```
### `stn(v)`
把STN串转换为任意类型。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `v` | string | 字符串,STN串 |
返回:any
### `randomize()`
已废弃函数。
返回:any
### `random()`
(参考文档未提供简述。)
返回:real
### `tslfilename()`
获取正在执行的 `.tsl` 主脚本完整路径。
返回:string
### `sysgettsllibpath()`
获取当前函数库查找路径。
返回:string
## 错误与断言函数
### `assert(error)`
断言。若Check为假,返回出错信息
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `error` | string | 字符串类型 |
返回:string
#### 示例
```tsl
return assert(0, '无效的语段');
// 输出:
// 示例包含说明文字,未作为可执行片段运行。
```
### `getProfilerInfo(clear)`
获得记录的优化信息。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `clear` | bool | Boolean。 |
返回:array
#### 示例
范例01:不弹出profiler窗口
```tsl
setProfiler(7); // 记录TSL源代码函数调用+二进制函数的调用+指令调用的优化信息
a := 99;
b := intToStr(a); // inttostr是函数
a := rand(1000, 1); // rand是指令
a := select * from a where [0]>0.5 end; // select是指令
setSysParam(pn_stock(), "SZ000002");
b := nDay3(100, close()); // nday3也算是指令,不是函数 ,close是函数
return getProfilerInfo(1);
// 输出:
// array(
// ("name":"__main__","times":0,"seconds":0.0,"op":
// (
// ("name":"usercall","times":4,"seconds":4.1E-5),
// ("name":"select","times":1,"seconds":0.0007792),
// ("name":"nday3","times":1,"seconds":6.8E-6),
// ("name":":=","times":6,"seconds":0.0011755),
// ("name":">","times":1000,"seconds":0.000292900000000004),
// ("name":"[","times":1000,"seconds":0.000127500000000002),
// ("name":"rand","times":1,"seconds":0.0002869)),"type":"tsl"),
// ("name":"getProfilerInfo","times":1,"seconds":0.0,"type":"bin"),
// ("name":"intToStr","times":1,"seconds":1.72E-5,"type":"bin"),
// ... 共 14 行输出,已截断。
```
范例02:弹出profiler窗口
```tsl
setProfiler(7); // 记录TSL源代码函数调用+二进制函数的调用+指令调用的优化信息
a := 99;
b := intToStr(a); // inttostr是函数
a := rand(1000, 1); // rand是指令
a := select * from a where [0]>0.5 end; // select是指令
setSysParam(pn_stock(), "SZ000002");
b := nDay3(100, close()); // nday3也算是指令,不是函数 ,close是函数
t := getProfilerInfo();
return b;
// 输出:返回程序结果的同时,另外弹出profiler窗口
```
### `importCsv(csv_str, data, include_index, include_header, single_arr)`
将指定csv格式字符串csvStr转换为数组,并存储在Data参数中。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `csv_str` | string | 字符串类型,csv格式字符串。 |
| `data` | array | 数组类型,转换成功的数组(输出值)。 |
| `include_index` | bool | 可选参数,布尔类型。指定字符串中是否包含数组下标信息。默认为False。 |
| `include_header` | bool | 可选参数,布尔类型。指定字符串中是否包含字段头部信息。默认为True。 |
| `single_arr` | bool | 可选参数,布尔类型。是否转换为一个一维数组。默认为False。 |
返回:bool
#### 示例
范例01:将指定csv格式字符串转换成二维数组
```tsl
s := "0,1,2\r\n2,5,0\r\n3,2,1\r\n4,7,2\r\n";
ret := importCsv(s, data);
if ret then return data;
else return ret;
// 输出:
// 示例未提供可直接输出的返回表达式。
```
范例02:读取本地csv文件,并将其转换成数组
```tsl
// 本地csv文件内容如下:
filepath := "D:\\test\\csv\\data.csv";
rdo2 readFile(rwRaw(), "", filepath, 0, 1000, s);
ret := importCsv(s, data, 1);
if ret then return data;
else return ret;
// 输出:
// Execute script error at Line:4
// function:__main__:line 4:instruction:usercall: 执行函数 importCsv 出错。
// function:__main__:line 4:instruction:usercall: function execute error
```
### `stm(v)`
把STM流转换为任意类型。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `v` | binary | 二进制类型,STM流 |
返回:any
### `getGlobalCache(name, out_value)`
按键读取全局缓存。
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `name` | string | 缓存键 |
| `out_value` | any | 输出变量,接收缓存值 |
返回:any