# Builtin - 基础 / 字符串 ## `strCmp(s1, s2)` 比较s1与s2的ascii码值的大小,若s1较大,则返回正数,若相等,则返回0,若s2较大,则返回负数。返回值的绝对值大小无实际意义。 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s1` | string | 字符串 | | `s2` | string | 字符串 | 返回:integer ### 示例 ```tsl a := strCmp("arr", "arry"); return a; // // 输出:-1 // 差异说明 // 返回值的绝对值大小无实际意义,在不同操作系统中,其绝对值大小也表现不一。 // 比如,对比字符或ASCII码的比较,在Linux中,返回ASCII码相差的值,Windows中只返回-1,0,1等代表大小,但是符号是一致的。 如strcmp(#97, #100); // Windows返回-1,Linux中返回-3。 ``` ## `format(formatstr, v1, v2, v3)` 返回根据formatstr设定的格式将v1,v2,v3,…参数连成字符串返回。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------------------- | | `formatstr` | string | 格式串,指明后面的参数的输出格式。 | | `v1` | any | 各种类型,并对应formatstr中的各种类型 | | `v2` | any | 可选参数,任意类型,指定的数值。 | | `v3` | any | 可选参数,任意类型,指定的数值。 | 返回:string ### 示例 ```tsl 1、把两个数字格式化为字符串:Format('First %d, Second %d', n1, n2); // 其中n1和n2是两个整数值,第一个占位符由第一个值替代,第二个占位符由第二个值替代,以此类推。 2、Format ('%-8d', n1); // 该句把数字n1转换成有长度是8个字符的字符串,并通过填充空白使文本左对齐,左对齐用减号(-) ``` 范例01:(D 和X的使用范例) ```tsl // 指定前2个数值转化为十进制数字字符串,第3个整数转化成十六进制字符串,3个数值必须是整数。 // 第2个转化%-5d:由于3只有1位,需要左对齐,则在右边添加4位空格 return format('%d,%-5d,%X', 4, 3, 12); // 输出字符串:4,3 ,C ``` 范例02:(E的使用范例) ```tsl // .1表示后面的小数位的精度。注意,v必须是一个浮点数,比如1234400.0,如果是1234400则被认为是整数,执行函数报错 return format("%.1E", 1234400.0); // 输出字符串:1.2E+006 ``` 范例03:(F的使用范例) ```tsl return format("%.1f", 1234400.56789); // 输出字符串: 1234400.6 ``` 范例04:(G的使用范例) ```tsl return format("%G", 1.2E+006); // 输出字符串:1200000 ``` 范例05:(N的使用范例) ```tsl return format("%.1N", 1234400.56789); // 输出字符串:1,234,400.6 ``` 范例06:(M的使用范例) ```tsl return format("%.1M", 1234400.56789); // 输出字符串:¥1,234,400.6 ``` 范例七:(参数的索引) ```tsl return format('%2:d,%1:5d,%0:X', 14, 3, 12); // 输出字符串:12, 3,E ``` ## `setLength(s, new_length)` 设置字符串或者Matrix或者二进制类型S的长度为NewLength | 参数 | 类型 | 说明 | | ------------ | ---------------------- | ------------------------------ | | `s` | string\|matrix\|binary | 字符串或者MATRIX或者二进制类型 | | `new_length` | integer | 整数,长度 | 返回:integer ### 示例 ```tsl // 相当于截取了源串S的前NewLength个字符 s := 'thankyou'; setLength(s, 5); return s; // 输出字符串:thank ``` ## `compareText(s1, s2)` 字符串比较,如果S1大于S2,则返回正数,如果相等,返回0,否则返回负数 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------- | | `s1` | string | 字符串,比较字符串1 | | `s2` | string | 字符串,比较字符串2 | 返回:integer ### 示例 ```tsl return compareText("SZ000002", "SZ000001"); // 输出:1 return compareText("SZ000001", "sz000001"); // 输出:0 return compareText("万科A", "万科A"); // 输出:-65248 ``` ## `copy(s, index, count)` 字符串拷贝函数,将字符串S的第Index个字符开始,拷贝出Count个字符组成字符串返回,或者说取S的子字符串出来。如果Index大于字符串长度,则返回空字符串,如果拷贝的内容超过了字符串长度,则只返回从第Index个字符到S字符串结尾的部分 | 参数 | 类型 | 说明 | | ------- | ------- | --------------------------------- | | `s` | string | 字符串类型,源串 | | `index` | integer | 整数,开始字符,字符串位置从1计起 | | `count` | integer | 整数,字符个数 | 返回:string ### 示例 ```tsl a := copy('thank you', 3, 6); return a; // 输出字符串:ank yo ``` ## `upperCase(s)` 将字符串S转换成大写并返回 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return upperCase("sz000001"); // 输出:SZ000001 ``` ## `leftBStr(a_text, a_count)` 返回Atext字符串从开始向左数ACount个字符组成的字符串。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------- | | `a_text` | string | 字符串,源串 | | `a_count` | integer | 整数,截取字符串的个数 | 返回:string ### 示例 ```tsl arr := leftBStr("i am a student", 4); return arr; // 输出字符串:i am ``` ## `rightBStr(a_text, a_count)` 返回Atext字符串从结束向右数ACount个字符组成的字符串。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------- | | `a_text` | string | 字符串,源串 | | `a_count` | integer | 整数,截取字符串的个数 | 返回:string ### 示例 ```tsl arr := rightBStr("i am a student", 4); return arr; // 输出:dent ``` ## `midBStr(a_text, astart, a_count)` 返回Atext字符串从Astart个字符的位置开始数出ACount个字符组成的字符串,天软字符串下标从1开始。 | 参数 | 类型 | 说明 | | --------- | ------- | --------------------------- | | `a_text` | string | 字符串,源串 | | `astart` | integer | 整数,开始位置,从1开始数起 | | `a_count` | integer | 整数,截取长度 | 返回:string ### 示例 ```tsl arr := midBStr("i am a student", 6, 6); return arr; // 输出: a stud ``` ## `getFormatLocalCode()` 获得当前Format等函数默认使用的地区区域码,-1为默认格式,0为当前系统所属地区码。 返回:integer ### 示例 ```tsl setFormatLocalCode(0); return getFormatLocalCode(); // 输出:0 ``` ## `compareStr(s1, s2)` 字符串比较,如果S1大于S2,则返回正数,如果相等,返回0,否则返回负数 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------- | | `s1` | string | 字符串,比较字符1 | | `s2` | string | 字符串,比较字符2 | 返回:integer ### 示例 ```tsl return compareStr("万科A", "万科A"); // 输出:-65248 ``` ## `trim(s)` 去掉字符串首尾空格以及控制字符的字符串 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return trim(" Hello! \r\n Tinysoft "); {输出字符串(把Hello前的空格以及Tinysoft后的空格删除,并把\r\n转义) "Hello! Tinysoft" } ``` ## `sameText(s1, s2)` 返回字符串S1,S2是否相等 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------- | | `s1` | string | 字符串,比较字符串1 | | `s2` | string | 字符串,比较字符串2 | 返回:bool ### 示例 ```tsl return sameText("SZ000001", "sz000001"); // 输出:1 // 输出:1 ``` ## `appendStr(dest, s)` 将字符串S加到Dest上,并返回到Dest参数中 | 参数 | 类型 | 说明 | | ------ | ------ | -------------- | | `dest` | string | 字符串,源串 | | `s` | string | 字符串,添加串 | 返回:void ### 示例 ```tsl s := "申万"; appendStr(s, "采掘"); return s; // 输出:申万采掘 ``` ## `getChar(s, index)` 取字符串/二进制流中相应位置的ascii码。Char为0-255之间的整数类型 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------- | | `s` | string | 字符串/二进制,源串 | | `index` | integer | 整数,取数位置 | 返回:char ### 示例 ```tsl arr := getChar("i am a student", 9); return arr; // 输出: 116 ``` ## `lowerCase(s)` 将字符串S转换成小写并返回 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return lowerCase("万科A"); // 输出: 万科a ``` ## `val(s, v, code)` 将一个字符串S转换成实数V,如果成功,则Code置0,否则Code表示转换不成功的字符的位置 | 参数 | 类型 | 说明 | | ------ | ------- | ------------ | | `s` | string | 字符串 | | `v` | real | 实数,输出值 | | `code` | integer | 整数,输出值 | 返回:any ### 示例 范例一: ```tsl val("1.1424E+0002", v, code); return v; // 输出:114.24 ``` 范例二: ```tsl // 返回错误信息:在转换到第6位字符时不成功。 val("1.142aE+0002", v, code); return array(v, code); // 输出:array(1.142,6) ``` ## `trimRight(s)` 去掉尾空格以及控制字符的字符串 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return trimRight("Hello! \r\n Tinysoft "); {输出字符串 " Hello! Tinysoft " } ``` ## `trimLeft(s)` 去掉首空格以及控制字符的字符串 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return trimLeft("Hello! \r\n Tinysoft "); {输出字符串 "Hello! Tinysoft " } ``` ## `strToIntDef(s, default)` 将字符串转换为整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | integer | 整数。转换失败时返回的默认值 | 返回:integer ### 示例 范例01 ```tsl return strToIntDef("12", 1); // 输出: 12 return strToIntDef("test", 1); // 输出: 1 ``` 范例02:十六进制格式字符串的转换 ```tsl return strToIntDef("0x12", 1); // 输出:18 ``` ## `formatFloat(format, value)` 将实数Value根据参数Format设定格式转换成字符串返回 | 参数 | 类型 | 说明 | | -------- | ------ | -------------- | | `format` | string | 字符串,格式串 | | `value` | real | 实数 | 返回:string ### 示例 ```tsl // 格式串 1234 -1234 0.5 0 // 无 -1234 0.5 0 0 1234 -1234 1 0 0.00 1234.00 -1234.00 0.50 0.00 #.## 1234 -1234 .5 #, ##0.00 1, 234.00 1, 234.00 0.50 0.00 #, ##0.00;(#, ##0.00) 1, 234.00 (1, 234.00) 0.50 0.00 #, ##0.00;;Zero 1, 234.00 -1, 234.00 0.5 Zero 0.000E+00 1.234E+03 -1.234E+03 5.000E-01 0.000E+00 #.###E-0 1.234E3 -1.234E3 5E-1 0E0 return formatFloat('0.000E+00', 23224); // 输出字符串:"2.322E+04" return formatFloat('##,###.00', 123); // 输出字符串:"123.00" return formatFloat('00,000.00', 123); // 输出字符串:"00,123.00" ``` ## `strToCurrDef(s, default)` 将数字字符串S转换成实数返回,字符串中不允许有千分号。如果转换没有成功,则返回参数Default指定的默认值。小数位数与设置的系统参数相关,但是最大有效小数位为4位,超过四位小数的处理在不同的版本处理可能存在不一致的地方。 | 参数 | 类型 | 说明 | | --------- | -------- | ------------ | | `s` | string | 字符串 | | `default` | currency | 实数,默认值 | 返回:currency ### 示例 ```tsl return strToCurrDef('1321.233', 3); // 输出:1321.233 ``` ## `strToFloatDef(s, default)` 将数字字符串S转换成实数返回,字符串中不允许有千分号。如果转换没有成功,则返回参数Default指定的默认值 | 参数 | 类型 | 说明 | | --------- | ------ | ------------ | | `s` | string | 字符串 | | `default` | real | 实数,默认值 | 返回:real ### 示例 ```tsl return strToFloatDef('a', 2); // 输出:2 ``` ## `tryStrToInt(s, value)` 将字符串转换为32位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ------- | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | integer | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryStrToInt("12", value); if ret then return value; else return "转换失败!"; // 输出: 12 ``` 范例02:转换失败 ```tsl ret := tryStrToInt("test", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryStrToInt("0x12", value); if ret then return value; else return "转换失败!"; // 输出:18 ``` ## `floatToStr(value)` 将实数转换成字符串类型。和FloatToStrne的区别:在处理浮点数据时,FloatToStr的结果会输出为1E15等格式 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 ```tsl return floatToStr(23.4); // 输出字符串:"23.4" return floatToStr(1E15); // 大数量级数据,输出:"1E15" ``` ## `tryStrToFloat(s, value)` 将数字字符串S转换成实数存到参数Value中,字符串中不允许有千分号。如果转换成功返回真,否则返回假。 | 参数 | 类型 | 说明 | | ------- | ------ | ---------------------------- | | `s` | string | 字符串,需要转换的数字字符串 | | `value` | real | 实数,输出值 | 返回:bool ### 示例 ```tsl tryStrToFloat('321.23', s); return s; // 输出:321.23 ``` ## `formatCurr(format, value)` 将实数Value根据参数Format设定格式转换成字符串返回 | 参数 | 类型 | 说明 | | -------- | -------- | -------------- | | `format` | string | 字符串,格式串 | | `value` | currency | 实数 | 返回:string ### 示例 ```tsl return formatCurr('0.000E+00', 232.24); // 输出:2.322E+02 ``` ## `tryStrToCurr(s, value)` 将数字字符串S转换成实数存到参数Value中,如果转换成功返回真,否则返回假。最大有效小数位为4位,超过四位小数的处理在不同的版本处理可能存在不一致的地方。 | 参数 | 类型 | 说明 | | ------- | -------- | ------ | | `s` | string | 字符串 | | `value` | currency | 实数 | 返回:bool ### 示例 ```tsl tryStrToCurr('1321.2333', s); return s; // 输出:1321.2333 ``` ## `boolToStr(s)` 将布尔型转换成字符串类型并返回。参数UseBoolStrs一般为假,如果B为真,函数返回'-1',如果B为假,返回'0'。若想返回’True’与’False’的结果可用BoolToStr2实现。 | 参数 | 类型 | 说明 | | ---- | ------ | ---------------------------------- | | `s` | string | 数字字符串Default:布尔型,一般为假 | 返回:string ### 示例 ```tsl return boolToStr(1>2, 0); // 输出:0 ``` ## `currToStr(value)` 将Currency型的实数转换成字符串类型返回 | 参数 | 类型 | 说明 | | ------- | -------- | ---- | | `value` | currency | 实数 | 返回:string ### 示例 ```tsl return currToStr(23.24); // 输出字符串:"23.24" ``` ## `tryStrToBool(s, value)` 如果S为'0',则参数Value置为假,如果S是非0的数字串,则参数Value置为真。如果转换成功,函数返回真,否则返回假 | 参数 | 类型 | 说明 | | ------- | ------ | -------------- | | `s` | string | 数字字符串 | | `value` | bool | 布尔型,输出值 | 返回:bool ### 示例 ```tsl tryStrToBool("12", s); return s; // 输出: 1 ``` ## `isValidIdent(ident)` 返回字符串Ident是否可以作为一个合法的标识符号。 | 参数 | 类型 | 说明 | | ------- | ------ | ------ | | `ident` | string | 字符串 | 返回:bool ### 示例 ```tsl return isValidIdent('a0ffh2'); // 输出: 1 ``` ## `strToBoolDef(s, default)` 如果S为'0',返回假,如果是非0的数字串,则返回真,如果转换不成功,则返回Default指定的值 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------- | | `s` | string | 数字字符串 | | `default` | bool | 整数,默认返回值 | 返回:bool ### 示例 ```tsl return strToBoolDef("12", 3); // 输出: 1 ``` ## `intToStr(value)` 整数Value转换成字符串 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:string ### 示例 ```tsl return intToStr(43); // 输出:"43" ``` ## `sysEncodecryptStr(s, t)` 对字符串进行加密。 | 参数 | 类型 | 说明 | | ---- | ------- | ------------------------ | | `s` | string | 字符串,需要被加密的源串 | | `t` | integer | 整数,选择加密类型 | 返回:string ### 示例 ```tsl s := "Server=127.0.0.1;Database=tsBase;Uid=TinySoft;Pwd=admin;"; encode_s := sysEncodecryptStr(s, 0); return encode_s; // 返回字符串:_ENCODE_3A364432572518291B2C02321C2C0233084C2D59385A3B482D10641755344722194C25417C28412F56056A0C78431364003D5C38553C5269 ``` ## `strToInt64Def(s, default)` 将字符串转换为64位整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | int64 | 整数。转换失败时返回的默认值 | 返回:int64 ### 示例 范例01 ```tsl return strToInt64Def("12", 1); // 输出: 12L return strToInt64Def("test", 1); // 输出: 1L ``` 范例02:十六进制格式字符串的转换 ```tsl return strToInt64Def("0x12", 1); // 输出:18L ``` ## `tryStrToInt64(s, value)` 将字符串转换为64位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ---------- | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | int64\|nil | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryStrToInt64("12", value); if ret then return value; else return "转换失败!"; // 输出: 12L ``` 范例02:转换失败 ```tsl ret := tryStrToInt64("test", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryStrToInt64("0x12", value); if ret then return value; else return "转换失败!"; // 输出:18L ``` ## `strToInt32Def(s, default)` 将字符串转换为32位整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | integer | 整数。转换失败时返回的默认值 | 返回:integer ### 示例 范例01 ```tsl return strToInt32Def("12", 1); // 输出: 12 return strToInt32Def("test", 1); // 输出: 1 ``` 范例02:十六进制格式字符串的转换 ```tsl return strToInt32Def("0x12", 1); // 输出:18 ``` ## `tryStrToInt32(s, value)` 将字符串转换为32位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ------------ | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | integer\|nil | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryStrToInt32("12", value); if ret then return value; else return "转换失败!"; // 输出: 12 ``` 范例02:转换失败 ```tsl ret := tryStrToInt32("test", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryStrToInt32("0x12", value); if ret then return value; else return "转换失败!"; // 输出:18 ``` ## `ansiContainsText(a_text, a_sub_text)` 判别一个字符串Atext是否包含另一个字符串ASubText。如果包含,就返回真,否则返回假。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_text` | string | 字符串类型,源串 | | `a_sub_text` | string | 字符串类型,子串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; return ansiContainsText(text, 'Abcd'); // 输出:1,包含 ``` ## `ansiStartsText(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的开头。如果ASubText 是Atext的开头,就返回真,否则返回假。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; return ansiStartsText('Abc', text); // 输出:1 ``` ## `ansiEndsText(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的结尾。如果ASubText 是Atext的结尾,就返回真,否则返回假。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; return ansiEndsText('Efg', text); // 输出:1 ``` ## `ansiContainsStr(a_text, a_sub_text)` 判定指定的字符串AsubTexts是否是Atext字符串的子串。返回布尔型真假值,字符串AsubTexts是Atext字符串的子串,就返回真,否则返回假 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_text` | string | 字符串类型,源串 | | `a_sub_text` | string | 字符串型,子串 | 返回:bool ### 示例 ```tsl a_text := 'abcdefg'; return ansiContainsStr(a_text, 'Bcd'); // 输出:1 ``` ## `ansiStartsStr(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的开头。如果ASubText 是Atext的开头,就返回真,否则返回假。与AnsiStartsText函数不同,字符串的匹配是大小写敏感的 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl atext := 'abcdefg'; return ansiStartsStr('abcd', atext); // 输出:1 ``` ## `ansiEndsStr(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的结尾。如果ASubText 是Atext的结尾,就返回真,否则返回假。与AnsiEndsText函数不同,字符串的匹配是大小写敏感的 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; return ansiEndsStr('efg', text); // 输出:1 ``` ## `stuffString(a_text, a_start, alength, a_sub_text)` 字符串重组函数。将指定的字符串Atext的第AStart个字符开始以后的ALength个字符用AsubText字符串替换掉,得到一个新的字符串返回。 | 参数 | 类型 | 说明 | | ------------ | ------- | ------------------------------------------------------------------------- | | `a_text` | string | 字符串类型,源串。 | | `a_start` | integer | 整数,表明从第几个字符串开始被替换,1代表第一个字符,2代表第2个,以次类推 | | `alength` | integer | 非负整数,表明替换几个连续的字符,如果为0,则直接插入AsubText字符串。 | | `a_sub_text` | string | 字符串类型,替换原的内容 | 返回:string ### 示例 ```tsl atext := "Here will be instead by \'HERE\'"; a_sub_text := "HERE"; return stuffString(atext, 1, 4, a_sub_text); // 输出:HERE will be instead by ‘HERE’ ``` ## `ansiReplaceText(a_text, a_from_text, a_to_text)` 字符串的部分替换。将一个字符串Atext的其中的AFromText部分替换为AToText部分。本函数支持多语言。 | 参数 | 类型 | 说明 | | ------------- | ------ | ---------------------- | | `a_text` | string | 字符串类型,源串 | | `a_from_text` | string | 字符串类型,被替换内容 | | `a_to_text` | string | 字符串类型,替换内容 | 返回:string ### 示例 ```tsl a_text := "First will be instead by \'Final\'"; a_from_text := "First"; a_to_text := "FINAL"; return ansiReplaceText(a_text, a_from_text, a_to_text); // 输出字符串:FINALwill be instead by 'Final' // 输出:Final will be instead by F ``` ## `ansiReplaceStr(a_text, a_from_text, a_to_text)` 字符串的部分替换。将一个字符串Atext的其中的AFromText部分替换为AToText部分。与AnsiEndsText函数不同,字符串的匹配是大小写敏感的。本函数支持多语言。 | 参数 | 类型 | 说明 | | ------------- | ------ | ---------------------- | | `a_text` | string | 字符串类型,源串 | | `a_from_text` | string | 字符串类型,被替换内容 | | `a_to_text` | string | 字符串类型,替换内容 | 返回:string ### 示例 ```tsl a_text := "Big will be replaced by \'BIG\', but big won\'t be replaced by \'BIG\'."; a_from_text := "Big"; a_to_text := "BIG"; return ansiReplaceStr(a_text, a_from_text, a_to_text); // 输出:BIG will be replaced by 'BIG', but big won't be replaced by 'BIG'. ``` ## `replaceText(a_text, a_from_text, a_to_text)` 字符串的部分替换。将一个字符串Atext中第一次遍历时存在的AFromText全部替换为AToText部分。本函数不支持多语言。 | 参数 | 类型 | 说明 | | ------------- | ------ | ---------------------- | | `a_text` | string | 字符串类型,源串 | | `a_from_text` | string | 字符串类型,被替换内容 | | `a_to_text` | string | 字符串类型,替换内容 | 返回:string ### 示例 ```tsl a_text := "The first letter will be replaced by \'one\', but the second letter won't."; a_from_text := "letter"; a_to_text := "one"; return replaceText(a_text, a_from_text, a_to_text); // 输出:The first one will be replaced by 'one', but the second one won't.n ``` ## `replaceStr(a_text, a_from_text, a_to_text)` 字符串的部分替换。将一个字符串Atext中第一次遍历时存在的AFromText全部替换为AToText部分。与AnsiEndsText函数不同,字符串的匹配是大小写敏感的。本函数不支持多语言。 | 参数 | 类型 | 说明 | | ------------- | ------ | ---------------------- | | `a_text` | string | 字符串类型,源串 | | `a_from_text` | string | 字符串类型,被替换内容 | | `a_to_text` | string | 字符串类型,替换内容 | 返回:string ### 示例 ```tsl a_text := "The First LETTER in uppercase won\'t be replaced by \'one\', but the Second letter in lowercase will."; a_from_text := "letter"; a_to_text := "one"; return replaceStr(a_text, a_from_text, a_to_text); // 输出:The First LETTER in uppercase won't be replaced by 'one', but the Second one in lowercase will. ``` ## `reverseString(s)` 返回字符串S的反序 | 参数 | 类型 | 说明 | | ---- | ------ | ---------- | | `s` | string | 字符串类型 | 返回:string ### 示例 ```tsl return reverseString('abcde1234'); // 返回字符串:4321edcba ho toStn(r); // 输出:"Tinysoft\n Statistical \nanalysis Language" ``` ## `dupeString(a_text, a_count)` 返回将指定的字符串AText重复ACount次后的字符串 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------- | | `a_text` | string | 字符串类型,源串 | | `a_count` | integer | 整数,重复的次数 | 返回:string ### 示例 ```tsl s := dupeString('Ha', 5); return s; // 输出:表示将S的值变为'HaHaHaHaHa' ``` ## `startsText(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的开头。如果ASubText 是Atext的开头,就返回真,否则返回假。可以处理非MBCS的原始字符串。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; return startsText('Abc', text); // 输出:1 // 差异说明 // 对于空字符串,windows系统中判定为1,Linux中判定为0。其它表现无差别。 如:return StartsText("", "A"); // windows中返回1,而Linux中返回0。 ``` ## `endsText(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的结尾。如果ASubText 是Atext的结尾,就返回真,否则返回假。可以处理非MBCS的原始字符串。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; return endsText('Efg', text); // 输出:1 // 差异说明 // 对于空字符串,windows系统中判定为1,Linux中判定为0。其它表现无差别。 如:return EndsText("", "A"); // windows中返回1,而Linux中返回0。 ``` ## `containsStr(a_text, a_sub_text)` 判定指定的字符串AsubTexts是否是Atext字符串的子串。返回布尔型真假值,字符串AsubTexts是Atext字符串的子串,就返回真,否则返回假。可以处理非MBCS的原始字符串。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_text` | string | 字符串类型,源串 | | `a_sub_text` | string | 字符串型,子串 | 返回:bool ### 示例 ```tsl a := '2020Tinysoft 天软'; b := 'tinysoft'; c := 'Tinysoft'; return array(containsStr(a, b), containsStr(a, c)); // 输出:array(0,1) ``` ## `startsStr(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的开头。如果ASubText 是Atext的开头,就返回真,否则返回假。可以处理非MBCS的原始字符串。与StartsText函数不同,字符串的匹配是大小写敏感的。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl atext := 'abcdefg'; return startsStr('abcd', atext); // 输出:1 ``` ## `endsStr(a_sub_text, a_text)` 判别一个字符串ASubText是否是另一个字符串AText的结尾。如果ASubText 是Atext的结尾,就返回真,否则返回假。可以处理非MBCS的原始字符串。与EndsText函数不同,字符串的匹配是大小写敏感的。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; return endsStr('efg', text); // 输出:1 ``` ## `stuffbString(a_text, a_star, alength, a_sub_text)` 字符串重组函数。将指定的字符串Atext的第AStart个字符开始以后的ALength个字符用AsubText字符串替换掉,得到一个新的字符串返回。可以处理非MBCS的原始字符串。一个汉字两个字节。 | 参数 | 类型 | 说明 | | ------------ | ------- | ----------------------------------------------------------------------- | | `a_text` | string | 字符串类型,源串。 | | `a_star` | integer | 整数,表明从第几个字节开始被替换,1代表第一个字节,2代表第2个,以次类推 | | `alength` | integer | 非负整数,表明替换几个连续的字节,如果为0,则直接插入AsubText字符串 | | `a_sub_text` | string | 字符串类型,替换原的内容 | 返回:string ### 示例 ```tsl atext := "Here will be instead by \'HERE\'"; a_sub_text := "HERE"; return stuffbString(atext, 1, 4, a_sub_text); // 输出:HERE will be instead by ‘HERE’ ``` ## `getPyStringList()` 汉字拼音首字母对照表 返回:tslobj ### 示例 ```tsl sl := getPyStringList(); return sl.values("明"); // 返回:M ``` ## `soundEx(a_text, alength)` 返回一个字符串,这个字符串是用来表明AText的发音的。通过转化为发音特征的字符串(SoundEx Codes),可以比较两个字符串是否发音相同或近似。Alength是声明最大的发音长度,一般定义为4 | 参数 | 类型 | 说明 | | --------- | ------- | -------------------- | | `a_text` | string | 字符串数组,发音源串 | | `alength` | integer | 整数,且大于1 | 返回:string ### 示例 ```tsl test_str1 := "sun"; s1 := soundEx(test_str1, 4); test_str2 := "sum"; s2 := soundEx(test_str2, 4); test_str3 := "test"; s3 := soundEx(test_str3, 4); return array(s1, s2, s3); // 输出:array("S500","S500","T230") ``` ## `soundexInt(a_text, alength)` 返回表示AText的发音的整数。整数是根据通过发音特征的字符串(SoundEx Codes)唯一转化来的,和字符串长度无关。 | 参数 | 类型 | 说明 | | --------- | ------- | ----------------------------- | | `a_text` | string | 字符串数组,源串 | | `alength` | integer | 整数,在1和8之间,一般定义为4 | 返回:integer ### 示例 ```tsl test_str1 := "sun"; s1 := soundexInt(test_str1, 4); test_str2 := "sum"; s2 := soundexInt(test_str2, 4); test_str3 := "test"; s3 := soundexInt(test_str3, 4); return array(s1, s2, s3); // 输出:array(208597,208597,218929) ``` ## `soundexProc(a_text, a_other)` 比较两个字符串的发音是否足够相似。根据AText和Aother转成发音码以后比较前面四个发音码。如果两个发音码相同,返回真,否则返回假 | 参数 | 类型 | 说明 | | --------- | ------ | ----------------------- | | `a_text` | string | 字符串,比较发音字符串1 | | `a_other` | string | 字符串,比较发音字符串1 | 返回:bool ### 示例 ```tsl return soundexProc("sun", "sum"); // 输出:1 return soundexProc("sun", "fun"); // 输出:0 return soundexProc("transaction", "transact"); // 输出:1 ``` ## `ansiResemblesText(a_text, a_other)` 判别一个字符串Atext是否相似于另一个字符串。如果足够相似,就返回真,否则返回假。 | 参数 | 类型 | 说明 | | --------- | ------ | ---------- | | `a_text` | string | 字符串类型 | | `a_other` | string | 字符串类型 | 返回:bool ### 示例 ```tsl return ansiResemblesText("sun", "sum"); // 输出:1 return ansiResemblesText("sun", "fun"); // 输出:0 return ansiResemblesText("transaction", "transact"); // 输出:1 ``` ## `getLikeFlag()` 返回Like操作符号的正则表达式的默认控制状态。即获得SetLikeFlag设置的状态,默认为1。 返回:integer ### 示例 ```tsl s := "ParseRegExpr 2011 \r\n ShenZhenTinysoft (TSL)"; reg := "(\\d+).*(tinysoft)"; setLikeFlag(0b0001+0x0010); // 大小写无关+使 '.' 特殊字符匹配任意字符 r := s like reg; return getLikeFlag(); // 获取当前正则控制符状态 // 返回17 ``` ## `setLikeFlag(flag)` 设置Like操作符号的正则表达式默认控制状态。默认值为1。 | 参数 | 类型 | 说明 | | ------ | ------- | -------------------- | | `flag` | integer | 正则表达式控制模式。 | 控制模式取值: | 取值 | 说明 | | -------- | ------------------------------------------------------------------------------------------------------------ | | `0b0001` | 大小写无关 | | `0b0010` | 多行开关打开 | | `0b0100` | 不理会^标志 | | `0b1000` | 不理会$标志 | | `0x0010` | REG_DOTALL;使 '.' 特殊字符匹配任意字符,包括换行符;如果没有这个标识,'.' 将匹配 除去 换行符以外的任意字符。 | | `0x0100` | REG_NOTEMPTY;禁止匹配空字符串 | | `0x0200` | REG_UNGREEDY;非贪婪模式 | 返回:integer ### 示例 ```tsl s := "ParseRegExpr 2011 \r\n ShenZhenTinysoft (TSL)"; reg := "(\\d+).*(tinysoft)"; setLikeFlag(0b0001+0x0010); // 大小写无关+使 '.' 特殊字符匹配任意字符 return s like reg; // 返回:1 ``` ## `nextCharIndex(s, index)` 返回指定字符的开始字节的下一个字符的字节开始位置。 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------ | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字符的开始字节位置 | 返回:integer ### 示例 ```tsl // ‘软’的开始字节是3,下一个字符是‘T’,‘T’的开始字节位置是5 s := "天软Tinysoft Statistical analysis Language"; return nextCharIndex(s, 3); // 返回:5 ``` ## `ansiToUtf8(s)` 转换为UTF8编码的字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------ | | `s` | string | 字符串,Ansi字符串 | 返回:string ### 示例 ```tsl return ansiToUtf8('2011 tinysoft天软科技'); // 返回字符串:2011 tinysoft澶╄蒋绉戞妧 ``` ## `utf8ToAnsi(s)` UTF8串转为Ansi串。 | 参数 | 类型 | 说明 | | ---- | ------ | -------------------------------------------- | | `s` | string | 字符串,UTF8编码字符串在Ansi编码中的显示字符 | 返回:string ### 示例 ```tsl return utf8ToAnsi ('2011 tinysoft澶╄蒋绉戞妧'); // 返回字符串:2011 tinysoft天软科技 ``` ## `charToByteIndex(s, index)` 字符索引到字节索引的转换。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字符位置 | 返回:integer ### 示例 ```tsl // 返回第30字符对应的字节位置 // 其中‘天软’占有4个字节,其余每个字符占1个字节 s := "天软Tinysoft Statistical analysis Language"; return charToByteIndex(s, 30); // 返回:32 ``` ## `byteToCharLen(s, max_len)` 判断字符流S中最多MaxLen的字节中所包含的字符数量。指定最多字节空间后,S字符串的字符个数。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------- | | `s` | string | 字符串,源串 | | `max_len` | integer | 整数,最大字节数 | 返回:integer ### 示例 ```tsl // 指定最多字节为30后,查找S中30个字节中有多少个字符, // 其中‘天软’占有4个字节,所以30个字节中,S有28个字符。 s := "天软Tinysoft Statistical analysis Language"; b1 := byteToCharLen(s, 30); return b1; // 返回:28 ``` ## `charToByteLen(s, max_len)` 判断字符串S中最多MaxLen的字符中占有的字节数。 | 参数 | 类型 | 说明 | | --------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `max_len` | integer | 整数,字符个数 | 返回:integer ### 示例 ```tsl // 在S字符串中取30个字符,统计其所占的字节数。 // 其中‘天软’占有4个字节,其余每个字符占1个字节,由此,30个字符占有32个字节 s := "天软Tinysoft Statistical analysis Language"; b1 := charToByteLen(s, 30); return b1; // 返回:32 ``` ## `charLength(s, index)` 指定位置的字符所包含的字节数。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字符位置 | 返回:integer ### 示例 ```tsl // 第2个字符‘软’的字节数 s := "天软Tinysoft Statistical analysis Language"; return charLength(s, 2); // 返回:2 ``` ## `byteToCharIndex(s, index)` 字节索引到字符索引的转换。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字节位置 | 返回:integer ### 示例 ```tsl // 返回第30字节位置时,是第几个字符位置 // 其中‘天软’占有4个字节,其余每个字符占1个字节 s := "天软Tinysoft Statistical analysis Language"; return byteToCharIndex(s, 30); // 返回:28 ``` ## `byteType(s, index)` 返回字符串的指定位置的字符的类型,类型为:0 单字节字符,1 多字节的引导字节, 2 多字节的结尾字节。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------------- | | `s` | string | 字符串, | | `index` | integer | 整数,指定字符的位置 | 返回:tmbcsbytetype ### 示例 ```tsl // 单字节字符‘t’ return byteType("2011 tinysoft", 6); // 0 // 多字节字符‘天’ return byteType("2011 tinysoft天软", 14); // 1 // 多字节字符‘软’,且为最后一个字符 return byteType("2011 tinysoft天软", 15); // 2 // 单字节字符‘1’,最后一个字符 return byteType("2011 ", 4); // 0 ``` ## `unicodeEsc(s)` 把一个字符串转换成为%uxxxx的Unicode编码串。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------ | | `s` | string | 字符串,Ansi字符串 | 返回:string ### 示例 ```tsl return echo unicodeEsc('2011 tinysoft天软科技'); // 返回字符串:2011%20tinysoft%u5929%u8F6F%u79D1%u6280 ``` ## `floattoStrw(value)` 将实数转换成宽字节字符串类型。和FloatToStrneW的区别:在处理大数量级数据(如1E15、10^15等)时,FloatToStrW的结果会输出为1E15等格式。 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 ```tsl return floattoStrw(1234.1234); // 输出:L"1234.1234" return floattoStrw(1E15); // 大数量级数据,输出:L"1E15" ``` ## `unUnicodeEsCw(s)` 把一个%uxxxx编码方式的Unicode编码串解码,解码后是一个宽字节的字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,Unicode编码字符串在Ansi编码中的显示字符 | 返回:string ### 示例 ```tsl return unUnicodeEsCw('2011%20tinysoft%u5929%u8F6F%u79D1%u6280'); // ’ 2011 tinysoft天软科技’ ``` ## `currtoStrw(value)` 将Currency型的实数转换成宽字节字符串类型返回 | 参数 | 类型 | 说明 | | ------- | -------- | ---- | | `value` | currency | 实数 | 返回:string ### 示例 ```tsl return currtoStrw(23.24); // 输出字符串:"23.24" ``` ## `inttostrw(value)` 整数Value转换成宽字节字符串,与IntToStr的区别是,intTostrw返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:string ### 示例 ```tsl s := inttostrw(2); return array(ifString(s), ifwstring(s)); // 返回:array(0,1) 说明返回结果串s为宽字节串,而非多字节字符串。 ``` ## `multiByteToUnicodew(s, cp)` 把一个多字节字符串转换为Unicode编码的宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ------- | ---------------------------------- | | `s` | string | 字符串,多字节字符串 | | `cp` | integer | 整数,代码页。中文为936或者54936。 | 返回:string ### 示例 ```tsl return multiByteToUnicodew('2020 Tinysoft 天软科技', 936); // 返回宽字节字符串:2020 Tinysoft 天软科技 即L’ 2020 Tinysoft 天软科技’ ``` ## `utf8ToUnicode(s)` UTF8串转为Unicode串。Unicode串为宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,UTF8编码字符串在Unicode编码中的显示字符 | 返回:string ### 示例 ```tsl return utf8ToUnicode ('2011 tinysoft澶╄蒋绉戞妧'); // 返回双字节字符串:2011 tinysoft天软科技 ``` ## `exportjsonstring(data, n)` 将TSL结构数据转换为json串。对于非ASCII编码的文字转换为转义字符。 | 参数 | 类型 | 说明 | | ------ | ------- | ----------------------------------------------------------------------------- | | `data` | | 天软数据,任意数据类型。 | | `n` | integer | 可选参数,要保留的小数位数。为0时保留1位小数,大于16或小于0时保留全部小数位数 | 返回:string ### 示例 范例01:将天软含中文的字符串转化为json串 ```tsl s := stockName('SZ000002'); // 万 科A return exportJsonString(s); // 返回字符串:"\u4E07 \u79D1\uFF21" ``` 范例02:将数组转化为json串 ```tsl s := array("A": 123, "B": "Tinysof 2026"); return exportJsonString(s); // 返回字符串:{\"A\":123,\"B\":\"Tinysof 2026\"} ``` 范例03:将数组转化为json串,并保留2位小数 ```tsl s := array((1.3245, 2.5123), ('Tinysoft天软', '天软科技')); return exportJsonString(s, 2); // 返回字符串:[[1.32,2.51],["Tinysoft\u5929\u8F6F","\u5929\u8F6F\u79D1\u6280"]] ``` ## `unUnicodeEsc(s)` 把一个%uxxxx编码方式的Unicode编码串解码。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,Unicode编码字符串在Ansi编码中的显示字符 | 返回:string ### 示例 ```tsl ReturnunUnicodeESC('2011%20tinysoft%u5929%u8F6F%u79D1%u6280'); // ’ 2011 tinysoft天软科技'‘ ``` ## `exportJsonStringUtf8(data, n)` 将天软数组转换为UTF8编码的Json串,解决与第三方交互时的转码问题。 | 参数 | 类型 | 说明 | | ------ | ------- | ----------------------------------------------------------------------------- | | `data` | | 天软数据,任意数据类型。 | | `n` | integer | 可选参数,要保留的小数位数。为0时保留1位小数,大于16或小于0时保留全部小数位数 | 返回:string ### 示例 范例01: ```tsl a := select ['StockID'], ['StockName'], dateToStr(['date']) as 'date', ['close'] from markettable datekey 20200901T to 20200902T of 'SZ000002' end; return exportJsonStringUtf8(a); // 返回字符串 [{"StockID": "SZ000002", "StockName": "涓 绉戯肌", "date": "2020-09-01", "close": 27.22}, {"StockID": "SZ000002", "StockName": "涓 绉戯肌", "date": "2020-09-02", "close": 27.52}] ``` 范例02:与python交互中的应用 ```tsl pythonCode import sys sys.path.append('C:\Program Files\Tinysoft\Analyse.NET') import TSLPy3 s=""" a := select ['StockID'], ['StockName'], dateToStr(['date']) as 'date', ['close'] from markettable datekey 20200901T to 20200902T of 'SZ000002' end; return exportJsonStringUtf8(a); """ data = tsl_py3.remoteExecute(s, {}) print(data[1].decode('utf8')) // python中返回: [{"StockID": "SZ000002", "StockName": "万 科A", "date": "2020-09-01", "close": 27.22}, {"StockID": "SZ000002", "StockName": "万 科A", "date": "2020-09-02", "close": 27.52}] ``` 范例03:将数组转化为json串,并保留2位小数 ```tsl s := array((1.3245, 2.5123), ('Tinysoft天软', '天软科技')); return exportJsonStringUtf8(s, 2); // 返回字符串:"[[1.32,2.51],[\"Tinysoft澶╄蒋\",\"澶╄蒋绉戞妧\"]]" ``` ## `exportJsonStringMbcs(data, n)` 将TSL结构数据转换为json串。和ExportJSONString不同的是,该函数不会对中文进行转码处理,保留中文原码。 | 参数 | 类型 | 说明 | | ------ | ------- | ----------------------------------------------------------------------------- | | `data` | | 天软数据,任意数据类型。 | | `n` | integer | 可选参数,要保留的小数位数。为0时保留1位小数,大于16或小于0时保留全部小数位数 | 返回:string ### 示例 范例01:将天软含中文的字符串转化为json串 ```tsl s := stockName('SZ000002'); // 万 科A return exportJsonStringMbcs(s); // 返回字符串:"\"万 科A\"" ``` 范例02:将数组转化为json串 ```tsl s := array((1, 'a'), ('Tinysoft天软', '天软科技')); return exportJsonStringMbcs(s); // 返回字符串:"[[1,\"a\"],[\"Tinysoft天软\",\"天软科技\"]]" ``` 范例03:将数组转化为json串,并保留2位小数 ```tsl s := array((1.3245, 2.5123), ('Tinysoft天软', '天软科技')); return exportJsonStringMbcs(s, 2); // 返回字符串:"[[1.32,2.51],[\"Tinysoft天软\",\"天软科技\"]]" ``` ## `lengthW(atext)` 返回字符串的长度,支持多字节语言,一个汉字当成一个字符。 | 参数 | 类型 | 说明 | | ------- | ------ | -------------------------- | | `atext` | string | 字符串,需计算长度的字符串 | 返回:integer ### 示例 ```tsl test_str := "Tinysoft lengthW:汉字当成一个字符"; return lengthW(test_str); // 输出:25(包括空格和:) ``` ## `midStr(a_text, astart, a_count)` 返回Atext字符串从Astart个字符的位置开始数出ACount个字符组成的字符串。天软字符串下标从1开始。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------------- | | `a_text` | string | 字符串数组,源串 | | `astart` | integer | 整数,开始位置,起始位置从1开始 | | `a_count` | integer | 整数,截取的字符串个数 | 返回:string ### 示例 ```tsl test_str := "Tinysoft midStr:支持多字节语言,汉字当成一个字符"; return midStr(test_str, 10, 30); // 输出字符串:“midStr:支持多字节语言,汉字当成一个字符” ``` ## `changeFileExt(file_name, extension)` 更改文件的扩展名。该函数并不实际更名指定的文件,其仅仅只是创建一个新的文件名字符串。此函数支持多字节字符集。 | 参数 | 类型 | 说明 | | ----------- | ------ | ----------------------- | | `file_name` | string | 文件名。 | | `extension` | string | 新的扩展名,需包含’.’。 | 返回:string ### 示例 ```tsl // 实际D盘的test.tsl没有改变 return changeFileExt("D:\\test.tsl", ".txt"); // D:\test.txt ``` ## `extractFilePath(file_name)` 返回文件名的驱动器以及目录部分,包含\。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return extractFilePath("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // D:\Tinysoft\tslweb\web\ ``` ## `extractFileDir(file_name)` 返回文件名的驱动器以及目录部分,即文件所在的目录,若非驱动根目录则不包含\。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return extractFileDir("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // D:\Tinysoft\tslweb\web // 差异说明 // 对于路径的处理,在不同系统中存在差异。如Linux中就没有驱动的概念,因此,在处理带驱动的路径时: // 如对于根目录的处理extractfiledir("C:\\abc.txt"),Windows中返回”C: \”而Linux中返回”C: ” ``` ## `extractFileDrive(file_name)` 返回文件名的驱动器部分。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return extractFileDrive("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:D: ``` ## `extractFileName(file_name)` 返回文件名的去掉路径后的纯文件名部分。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return extractFileName("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:test.tsl ``` ## `extractFileExt(file_name)` 返回文件的扩展名部分,其中包括”.”部分。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return extractFileExt("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:.tsl ``` ## `extractRelativePath(base_name, dest_name)` 返回DestName文件相对于BaseName的相对路径名。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------- | | `base_name` | string | 字符串,文件路径及文件名1 | | `dest_name` | string | 字符串,文件路径及文件名2 | 返回:string ### 示例 ```tsl return extractRelativePath("D:\\test.tsl", "D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:Tinysoft\tslweb\web\test.tsl // 差异说明 // 由于Linux系统中无盘符概念,所以不支持该功能。 ``` ## `isPathDelimiter(s, index)` 判断字符串S的Index位置是否是一个’\’符号。 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | | `index` | integer | 整数,字符串位置 | 返回:bool ### 示例 ```tsl return isPathDelimiter("D:\\Tinysoft\\tslweb\\web\\test.tsl", 3); // 输出:1 ``` ## `isDelimiter(delimiters, s, index)` 判断字符串S的Index位置是否包含在Delimiters字符串中。 | 参数 | 类型 | 说明 | | ------------ | ------- | ---------------------- | | `delimiters` | string | 字符串,源串 | | `s` | string | 字符串,查找字符所在串 | | `index` | integer | 整数,指定的字符位置 | 返回:bool ### 示例 ```tsl return isDelimiter("tinysoft", "2011 tinysoft", 6); // 输出:1 ``` ## `includeTrailingPathDelimiter(s)` 返回加上了’\’结尾的路径。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return includeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web"); // 输出: D:\Tinysoft\tslweb\web\ // 差异说明 // 与路径中存在的路径分割符保持一致,当路径中不存在分割符时,则Windows中默认增加"\",在Linux中,则默认结路径路径加上”/”结尾。 如在Linux中:return IncludeTrailingPathDelimiter("/Tinysoft"); // 则返回字符串:/Tinysoft/ ``` ## `includeTrailingBackslash(s)` 返回加上了’\’结尾的路径。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return includeTrailingBackslash ("D:\\Tinysoft\\tslweb\\web"); // 输出: D:\Tinysoft\tslweb\web\ // 差异说明 // 与路径中存在的路径分割符保持一致,当路径中不存在分割符时,则Windows中默认增加"\",在Linux中,则默认结路径路径加上”/”结尾。 如在Linux中:return IncludeTrailingBackslash ("/Tinysoft"); // 则返回字符串:/Tinysoft/ ``` ## `excludeTrailingPathDelimiter(s)` 去掉路径的’\’结尾。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return excludeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web\\"); // 输出: D:\Tinysoft\tslweb\web ``` ## `excludeTrailingBackslash(s)` 去掉路径的’\’结尾。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl return excludeTrailingBackslash("D:\\Tinysoft\\tslweb\\web\\"); // 输出: D:\Tinysoft\tslweb\web ``` ## `lastDelimiter(delimiters, s)` 最后的分隔符在字符串S中的位置。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `delimiters` | string | 字符串,分隔符 | | `s` | string | 字符串,文件路径 | 返回:integer ### 示例 ```tsl return lastDelimiter('\\', "D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:23 ``` ## `ansiCompareFileName(s1, s2)` 比较两个文件名,返回>0当S1>S2,=0当S1=S2,<0当S1也是unicode串 ret := parseRegExpr(reg, source, "", result, m_pos, mlen); return result; // 输出:array((L"你好")) ``` 范例04:通过控制符"u"设置为非贪婪模式 ```tsl source := "hello tiny tiny tiny tiny tiny"; reg := "hello.*(tiny)"; ret := parseRegExpr(reg, source, "u", result, m_pos, mlen); return result; // 返回:array(("hello tiny", "tiny")) ``` ## `multiByteToUnicode(s, cp)` 把一个ANSI编码方式转换为Unicode编码。 | 参数 | 类型 | 说明 | | ---- | ------- | ---------------------------------- | | `s` | string | 字符串,ANSI字符串 | | `cp` | integer | 整数,代码页。中文为936或者54936。 | 返回:string ## `unicodetomultibyte(s, cp)` 把一个Unicode编码方式转换为ANSI编码。 | 参数 | 类型 | 说明 | | ---- | ------- | ---------------------------------- | | `s` | string | 字符串,Unicode字符串。 | | `cp` | integer | 整数,代码页。中文为936或者54936。 | 返回:string ## `lcMapString(s, lcid, flag)` 编码转化函数,参考WINDOWS API LCMapString。 | 参数 | 类型 | 说明 | | ------ | ------- | ------------ | | `s` | string | 字符串。 | | `lcid` | integer | 标识ID。 | | `flag` | integer | 转换的参数。 | 返回:string ### 示例 ```tsl lcMapString(s, 0x0804, 0x2000000); // 可以把繁体转换为简体字符集 return lcMapString("亞洲", 0x0804, 0x2000000); // 返回: 亚洲 // 差异说明 // 由于根据windowsAPI的开发,所以Linux中不支持。 ``` ## `unicodeEsc2(s)` 把一个字符串转换成为\uxxxx的Unicode编码串。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------ | | `s` | string | 字符串,Ansi字符串 | 返回:string ### 示例 ```tsl return unicodeEsc('2011 tinysoft天软科技'); // 返回字符串:2011 tinysoft\u5929\u8F6F\u79D1\u6280 ``` ## `concat(s_n)` 返回s1+s2+s3+…sn合并的字符串,支持unicode串(宽字节字符集)进行合并。 | 参数 | 类型 | 说明 | | ----- | ------ | ------ | | `s_n` | string | 字符串 | 返回:string ### 示例 范例01: ```tsl arr := concat("thank-", "you-", "very-", "much! "); return arr; // 输出:thank-you-very-much! ``` 范例02:Unicode字符串的合并 ```tsl s1 := multiByteToUnicodew('天软', 936); s2 := inttostrw(2020); return concat(s1, s2); // 输出宽字节字符串:天软2020 ``` ## `rightStr(text, num_chars)` 前N个字符;基于所指定的字符数返回文本字符串中的最后一个或后几个字符; | 参数 | 类型 | 说明 | | ----------- | ------- | -------- | | `text` | string | 字符串 | | `num_chars` | integer | 字符个数 | 返回:string ### 示例 ```tsl return rightStr('abccccdddd', 2); // 结果:’dd’ ``` ## `leftStr(text, num_chars)` 返回字符串从开始向左数Num_Chars个字符组成的字符串,支持多字节语言,一个汉字当成一个字符。 | 参数 | 类型 | 说明 | | ----------- | ------- | -------- | | `text` | string | 字符串 | | `num_chars` | integer | 字符个数 | 返回:string ### 示例 ```tsl return leftStr('abccccdddd', 2); // 结果:’ab’ ``` ## `wrapText(max_col)` 按照最大行长为MaxCol自动分行。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------ | | `max_col` | integer | 整型,每行最长字符 | 返回:string ### 示例 ```tsl const_line := "Separate this sentence to two lines."; return wrapText(const_line, 20); {输出: (自动换行时考虑字词的完整性) Separate this sentence to two lines. } ``` ## `array2Str(value, aps)` 将数组value转换成一个用aps作为分割符号的字符串,与str2Array函数相反。 | 参数 | 类型 | 说明 | | ------- | --------------- | ---------------------------------------------------------------------------- | | `value` | array of string | 一维数组,需要组合成字符串数据的一维数组,可以是字符串数组,也可以是数字数组 | | `aps` | string | 字符串,分割符,默认分割符为分号‘;’ | 返回:string ### 示例 ```tsl var arr := array("thank", "you", "very", "much! "); a := array2Str(arr, "-"); return a; // 输出:thank-you-very-much! ``` ## `chr(value)` 返回ascii码的值为value的字符 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:string ### 示例 ```tsl a_value := chr(50); return a_value; // 输出:字符串'2' ``` ## `wideChr(value)` 返回unicode码的值为value的unicode字符 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:widestring ### 示例 ```tsl a_value := wideChr(25105); return a_value; // 输出:Unicode字符串L'我' ``` ## `setFormatLocalCode(code)` 设置Format等函数默认使用的地区区域码,每个区域都有默认的格式。-1为默认格式,0为当前系统所属地区码。 | 参数 | 类型 | 说明 | | ------ | ------- | ---- | | `code` | integer | 整型 | 返回:integer ### 示例 ```tsl setFormatLocalCode(0); return getFormatLocalCode(); // 输出:0 ``` ## `pos(substr, s)` 子串位置,返回字符串Substr在字符串S中的位置,即S从第几个字母开始跟Substr的字符匹配,如果没有找到,就返回0。当参数类型不为字符串的时候不返回异常 | 参数 | 类型 | 说明 | | -------- | ------ | ---------------------------------- | | `substr` | string | 字符串类型,需要查找的字符串,子串 | | `s` | string | 字符串类型,源串 | 返回:integer ### 示例 ```tsl a := pos('a', 'thank you'); return a; // 输出:3 return pos('fg', 'adcfgvbhj'); // 结果:4 ``` ## `str(x, s)` 将一个实数X转换成字符串,存到参数S中 | 参数 | 类型 | 说明 | | ---- | ------ | -------------- | | `x` | real | 实数 | | `s` | string | 字符串,输出值 | 返回:integer ### 示例 ```tsl str(114, s); return s; // 输出:1.14000000000000E+0002 ``` ## `intToHex(value, digits)` 返回整数Value转换成16进制格式的字符串,Digits为最小的数字个数,不足补0 | 参数 | 类型 | 说明 | | -------- | ------- | ------------------ | | `value` | integer | 整数 | | `digits` | integer | 整数,最小数字个数 | 返回:string ### 示例 ```tsl return intToHex(43, 1); // 输出: 2B(二进制时候为:101011) ``` ## `boolToStr2(b)` 将布尔型转换成字符串类型并返回。如果B为真,函数返回'true',如果B为假,返回' False'。若想返回’-1’与’0’的结果可用BoolToStr实现。 | 参数 | 类型 | 说明 | | ---- | ---- | ------ | | `b` | bool | 布尔型 | 返回:string ### 示例 ```tsl return boolToStr2(2>1); // 返回’ True’ ``` ## `decodeSoundexInt(a_value)` 是SoundexInt函数的反函数,将表示发音的整数转成发音的字符串(SoundEx Codes)。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------ | | `a_value` | integer | 整数,表示发音特征的整数 | 返回:string ### 示例 ```tsl test_str := "Tinysoft SoundexInt:返回表示AText的发音的整数"; test_str := decodeSoundexInt(soundexInt(test_str, 4)); return test_str; // T521 ``` ## `decodeSoundexWord(a_value)` 是SoundexWord函数的反函数,将表示发音的整数转成发音的字符串(SoundEx Codes)。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------ | | `a_value` | integer | 整数,表示发音特征的整数 | 返回:string ### 示例 ```tsl test_str := "Tinysoft SoundexInt:返回表示AText的发音的整数"; test_str := decodeSoundexWord(soundexWord(soundEx(test_str, 4))); // 24206 return test_str; // T000 ``` ## `ansiPos(_const, s)` 判断子串在字符串源串中的位置,从1开始计起,第1个即找到子串,则返回1。如果没有找到对应的子串,则返回0。其中,汉字占一个字符。 | 参数 | 类型 | 说明 | | -------- | ------ | ------------ | | `_const` | string | 字符串,子串 | | `s` | string | 字符串,源串 | 返回:integer ### 示例 ```tsl return ansiPos("tinysoft", "2011 tinysoft"); // 6 ``` ## `strw(x, s)` 将一个实数X转换成科学记数法格式的宽字节字符串,存到参数S中 | 参数 | 类型 | 说明 | | ---- | ---------- | -------------- | | `x` | real | 实数 | | `s` | widestring | 字符串,输出值 | 返回:integer ### 示例 ```tsl v := strw(123.123, s); return s; // 返回宽字节字符串:1.23123000000000E+0002 ``` ## `intToHexw(value, digits)` 返回整数Value转换成16进制格式的宽字节字符串,Digits为最小的数字个数,不足补0。IntToHexw返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | -------- | ------- | ------------------ | | `value` | integer | 整数 | | `digits` | integer | 整数,最小数字个数 | 返回:string ### 示例 ```tsl return intToHexw(43, 5); // 返回宽字符串字符串:0002B ``` ## `ifwstring(value, n)` 判断value是否是一个宽字节字符串类型(Unicode字符集)。与ifString的区别是,ifString判断是否是多字节字符类型。可通过可选参数N对数组中的行或元素进行判断。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------------------------- | | `value` | any | 任意类型数值。 | | `n` | integer | 可选参数,整数。具体参考返回说明 | 返回:bool ### 示例 范例一: ```tsl // 判断是否为宽字节字符串类型 r1 := ifwstring(1); r2 := ifwstring("A"); r3 := ifwstring(l"C"); r4 := ifwstring(array(1, "A", l"C")); return array(r1, r2, r3, r4); // 结果:array(0,0,1,0) ``` 范例二: ```tsl // 对数组第一维度数据进行类型判断 t := array(l"C", 3.56, "A", (1, l"C", 3), nil); return ifwstring(t, -1); // 结果:array(1,0,0,0,0) ``` 范例三: ```tsl // 对数组中每一数据进行类型判断 t := array(l"C", 3.56, "A", (nan, 2.14, l"C"), nil); return ifwstring(t, 1); // 结果:array(1,0,0,(0,0,1),0) ``` ## `boolToStrw2(b)` 将布尔型转换成宽字节字符串类型并返回。与BoolToStr2的区别是,BoolToStr2返回的是多字节字符串,而BoolToStrw2返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ---- | ------ | | `b` | bool | 布尔型 | 返回:string ### 示例 ```tsl return boolToStrw2(2>1); // 返回宽字节字符串:True ``` ## `boolToStrw(b)` 将布尔型转换成宽字节字符串类型并返回。与BoolToStr的区别是,BoolToStr返回的是多字节字符串,而BoolToStrw返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ---- | ------ | | `b` | bool | 布尔型 | 返回:string ### 示例 ```tsl return boolToStrw(2>1); // 返回宽字节字符串:-1 ``` ## `functionVer(_type, name)` 返回函数版本号。函数版本号是一个函数保存在SERVER的一个版本标识,可以用来判断函数是否被修改过。可和SAVETABLE和LOADTABLE综合使用。 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------ | | `_type` | integer | 整数,函数类型。 | | `name` | string | 字符串,函数名称。 | 返回:integer ## `strToBase64(s)` 将字符串转换为BASE64编码并返回,该函数为本运行函数,使用时需要加rdo2 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return rdo2 strToBase64('a12'); // 返回字符串:YTEy ``` ## `base64ToStr(s)` 将BASE64编码转换为字符串并返回,该函数为本运行函数,使用时需要加rdo2 | 参数 | 类型 | 说明 | | ---- | ------ | ---------------------------- | | `s` | string | 字符串,BASE64编码的字符串。 | 返回:string ### 示例 ```tsl return rdo2 base64ToStr('YTEy'); // 返回字符串:a12 ``` ## `encodeUriComponent(s)` 将URI中的某些字符用十六进制的转义序列进行替换 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------- | | `s` | string | 字符串,含有URI或其他要编码的字符串 | 返回:string ## `decodeUriComponent(s)` 将URI中的十六进制转义序用它们表示的字符替换 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,由EncodeURIComponent(s)函数编码的字符串 | 返回:string ## `encodeUri(s)` 将URI中的某些字符用十六进制的转义序列进行替换 | 参数 | 类型 | 说明 | | ---- | ------ | --------------------------------- | | `s` | string | 字符串含有 URI 或其他要编码的文本 | 返回:string ## `decodeUri(s)` 将URI中的十六进制转义序用它们表示的字符替换 | 参数 | 类型 | 说明 | | ---- | ------ | --------------------------------------- | | `s` | string | 字符串,由EncodeURI (s)函数编码的字符串 | 返回:string ## `getMsgDigest(s, mode)` 计算字符串s的摘要,返回摘要的字符串 | 参数 | 类型 | 说明 | | ------ | ------- | ------------------------------------- | | `s` | string | 计算摘要的字符串。 | | `mode` | integer | 指定摘要算法,摘要函数支持的算法包括: | 返回:string ## `DT_Date()` 返回'Date'字符串。 返回:string ## `DT_Str()` 返回'String'字符串。 返回:string ## `DT_Real()` 返回'Real'字符串。 返回:string ## `formatFloatExt(v, dtype)` 格式化输出-数字 | 参数 | 类型 | 说明 | | ------- | ------- | ---------- | | `v` | real | 实数 | | `dtype` | integer | 数据的格式 | 返回:string ### 示例 ```tsl return formatFloatExt(12345.67, 1); // 结果:’ 12,345.67’ return formatFloatExt("123"); // 结果:’ -’ ``` ## `spaceByNumber(n)` 生成N个空格字符串 | 参数 | 类型 | 说明 | | ---- | ------- | ---- | | `n` | integer | 整数 | 返回:string ### 示例 ```tsl return write('---', spaceByNumber(2), '---'); // 运行信息打印结果: ``` ## `tryUppercase(s)` 将字符串S转换成大写并返回,不抛出异常,转换失败时返回"" | 参数 | 类型 | 说明 | | ---- | ------ | --------------- | | `s` | string | 字符串,原字符串 | 返回:string ### 示例 ```tsl return tryUppercase("abc"); // 结果:"ABC" ``` ## `tryLowercase(s)` 将字符串S转换成小写并返回,不抛出异常,转换失败时返回"" | 参数 | 类型 | 说明 | | ---- | ------ | --------------- | | `s` | string | 字符串,原字符串 | 返回:string ### 示例 ```tsl return tryUppercase("ABC"); // 结果:"abc" ``` ## `letters(vlaue, ul)` 将数字与在字符串进行对照转换。基本用法同R的letters。在超出26的时候,仿excel的列名的规则提取。用于将excel数字列名转为字符串列名:1->'A'。 | 参数 | 类型 | 说明 | | ------- | ------- | ----------------------- | | `vlaue` | integer | 整数。正整数列名 | | `ul` | integer | 整数。是否大写,默认为1 | 返回:string/array ### 示例 ```tsl return letters(1, 0); // 结果:a ``` ## `decToInt64(s)` 将字符串转换为64位整数。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串。需转换的字符串。 | 返回:integer ### 示例 范例01: ```tsl return decToInt64("12"); // 输出: 12L ``` 范例02:十六进制格式字符串的转换 ```tsl return decToInt64("0x12"); // 报错 return strToInt64("0x12"); // 输出:18L ``` ## `decToInt64Def(s, default)` 将字符串转换为64位整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | integer | 整数。转换失败时返回的默认值 | 返回:integer ### 示例 范例01 ```tsl return decToInt64Def("12", 1); // 输出: 12L return decToInt64Def("test", 1); // 输出: 1L ``` 范例02:十六进制格式字符串的转换 ```tsl return decToInt64Def("0x12", 1); // 输出: 1L return strToInt64Def("0x12", 1); // 输出:18L ``` ## `tryDecToInt64(s, value)` 将字符串转换为64位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ------------ | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | integer\|nil | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryDecToInt64("12", value); if ret then return value; else return "转换失败!"; // 输出: 12L ``` 范例02:转换失败 ```tsl ret := tryDecToInt64("test", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryDecToInt64("0x12", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ret := tryStrToInt64("0x12", value); if ret then return value; else return "转换失败!"; // 输出:18L ``` ## `decToInt32(s)` 将字符串转换为32位整数。 | 参数 | 类型 | 说明 | | ---- | ------ | ---------------------- | | `s` | string | 字符串。需转换的字符串 | 返回:integer ### 示例 范例01 ```tsl return decToInt32("12"); // 输出: 12 ``` 范例02:十六进制格式字符串的转换 ```tsl return decToInt32("0x12"); // 报错 return strToInt32("0x12"); // 输出:18 ``` ## `decToInt32Def(s, default)` 将字符串转换为32位整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | integer | 整数。转换失败时返回的默认值 | 返回:integer ### 示例 范例01 ```tsl return decToInt32Def("12", 1); // 输出: 12 return decToInt32Def("test", 1); // 输出: 1 ``` 范例02:十六进制格式字符串的转换 ```tsl return decToInt32Def("0x12", 1); // 输出: 1 return strToInt32Def("0x12", 1); // 输出:18 ``` ## `tryDecToInt32(s, value)` 将字符串转换为32位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ------------ | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | integer\|nil | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryDecToInt32("12", value); if ret then return value; else return "转换失败!"; // 输出: 12 ``` 范例02:转换失败 ```tsl ret := tryDecToInt32("test", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryDecToInt32("0x12", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ret := tryStrToInt32("0x12", value); if ret then return value; else return "转换失败!"; // 输出:18 ``` ## `toHttpPostdata(v, data_mode)` 根据数据模式转换为字符串格式 | 参数 | 类型 | 说明 | | ----------- | ------- | --------------- | | `v` | integer | 整数,数据 | | `data_mode` | string | 字符串,数据模式 | 返回:string ### 示例 ```tsl // 转换json格式数据。 v := array("Type": 1, "IDs": array("SZ000001"), "SUBs": array("date_s", "price")); mode := "json"; return toHttpPostdata(v, mode); // 结果:{"Type":1,"IDs":["SZ000001"],"SUBs":["date_s","price"]} ``` ## `decToInt(s)` 将字符串转换为整数。 | 参数 | 类型 | 说明 | | ---- | ------ | ---------------------- | | `s` | string | 字符串。需转换的字符串 | 返回:integer ### 示例 范例01 ```tsl return decToInt("12"); // 输出: 12 ``` 范例02:十六进制格式字符串的转换 ```tsl return decToInt("0x12"); // 报错 return strToInt("0x12"); // 输出:18 ``` ## `decToIntDef(s, default)` 将字符串转换为整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | integer | 整数。转换失败时返回的默认值 | 返回:integer ### 示例 范例01 ```tsl return decToIntDef("12", 1); // 输出: 12 return decToIntDef("test", 1); // 输出: 1 ``` 范例02:十六进制格式字符串的转换 ```tsl return decToIntDef("0x12", 1); // 输出: 1 return strToIntDef("0x12", 1); // 输出:18 ``` ## `tryDecToInt(s, value)` 将字符串转换为整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ------------ | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | integer\|nil | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryDecToInt("12", value); if ret then return value; else return "转换失败!"; // 输出: 12 ``` 范例02:转换失败 ```tsl ret := tryDecToInt("test", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryDecToInt("0x12", value); if ret then return value; else return "转换失败!"; // 输出: "转换失败!" ret := tryStrToInt("0x12", value); if ret then return value; else return "转换失败!"; // 输出:18 ``` ## `floatToStrne(value)` 将实数转换成字符串类型。和FloatToStr的区别:在处理浮点数据时,FloatToStrne的结果不会输出为1E15等格式 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 ```tsl return floatToStrne(23.4); // 输出字符串:"23.4" return floatToStrne(1E15); // 大数量级数据,输出:"1000000000000000" ``` ## `fuzzyCompare(_type, s1, s2)` 根据指定算法,计算两字符串的相似性 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------------------ | | `_type` | integer | 模糊匹配算法类型,支持如下几种算法: | | `s1` | string | 字符串1 | | `s2` | string | 字符串2 | 返回:real ### 示例 ```tsl // 使用Jaccard相似度算法,计算字符串"kitten"和"sitting"的相似性 return fuzzyCompare(fzJaccard(), "kitten", "sitting"); // 等价于FuzzyCompare(2,"kitten","sitting") // 返回:0.222222222222222 ``` ## `fuzzyCompareEx(_type, s1, s2, n, nret)` 根据指定算法,计算两字符串的相似性 | 参数 | 类型 | 说明 | | ------- | ------- | ---------------------------------------------------------------------------------- | | `_type` | integer | 模糊匹配算法类型,支持如下几种算法: | | `s1` | string | 字符串1 | | `s2` | string | 字符串2 | | `n` | integer | 仅指定算法为FzJaccard、FzCosine、FzSimHash时,该参数有效;其对应含义和默认值如下: | | `nret` | integer | 输出值;指定不同的算法时,其对应含义如下: | 返回:real ### 示例 ```tsl // 使用Jaccard相似度算法,指定切分字符长度为1,计算字符串"kitten"和"sitting"的相似性 t := fuzzyCompareEx(fzJaccard(), "kitten", "sitting", 1, nret); return array(t, nret); // t值为相似性,nret值为两字符串切分后交集中元素个数,返回值为array(0.428571428571429,3) ``` ## `fzEditDistance()` 基于编辑距离(Edit Distance)的模糊匹配算法,核心是计算将一个字符串转换为另一个字符串所需的最小编辑操作次数,允许的操作包含插入、删除、替换三类。 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算 ```tsl return fuzzyCompare(fzEditDistance(), "kitten", "sitting"); // 返回:0.571428571428571 ``` 范例一:FuzzyCompareEx相似性计算 ```tsl t := fuzzyCompareEx(fzEditDistance(), "kitten", "sitting", n, nret); return array(t, nret); // 返回:array(0.571428571428571,3) // 算法对比解析: // 字符串"kitten"转换为"sitting"需要3步(k->s,e->i,添加g),字符串总长度7,相似度为1-3/7=4/7(即0.571428571428571) ``` ## `fzHammingDistance()` Hamming Distance(汉明距离)算法类型:计算两字符串对应位置上不同字符的数量。 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算 ```tsl return fuzzyCompare(fzHammingDistance(), "kitten", "sitting"); // 返回:0.571428571428571 ``` 范例二:FuzzyCompareEx相似性计算 ```tsl t := fuzzyCompareEx(fzHammingDistance(), "kitten", "sitting", n, nret); return array(t, nret); // 返回:array(0.571428571428571,3) // 算法对比解析: // 字符串"kitten"、"sitting"对应位置上不同的字符有3处(k->s, e->i, g),字符串总长度为7,相似度为1-3/7=4/7(即0.571428571428571) ``` ## `fzLongestSubstring()` Longest Substring(最长公共子串)算法类型:找出两字符串中连续出现的最长相同子串。 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算 ```tsl return fuzzyCompare(fzLongestSubstring(), "kitten", "sitting"); // 返回:0.428571428571429 ``` 范例二:FuzzyCompareEx相似性计算 ```tsl t := fuzzyCompareEx(fzLongestSubstring(), "kitten", "sitting", n, nret); return array(t, nret); // 返回:array(0.428571428571429,3) // 算法对比解析: // 字符串"kitten"、"sitting"中连续出现的最长相同子串为"itt",字符串总长度为7,相似度为3/7(即0.428571428571429) ``` ## `fzLongestSequnce()` Longest Sequnce(最长公共子序列)算法类型:找出两字符串中顺序相同但不必连续的最长子序列 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算 ```tsl return fuzzyCompare(fzLongestSequnce(), "kitten", "sitting"); // 返回:0.571428571428571 ``` 范例二:FuzzyCompareEx相似性计算 ```tsl t := fuzzyCompareEx(fzLongestSequnce(), "kitten", "sitting", n, nret); return array(t, nret); // 返回:array(0.571428571428571,4) // 算法对比解析: // 字符串"kitten"、"sitting"中顺序相同但不必连续的最长子序列为"ittn",字符串总长度为7,相似度为4/7(即0.571428571428571) ``` ## `fzJaccard()` Jaccard相似度算法类型:将字符串根据指定长度n(默认值为2)划分为两个字符集合,计算两集合交集元素个数与并集元素个数的比值。 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算,字符切分长度为2 ```tsl return fuzzyCompare(fzJaccard(), "kitten", "sitting"); // 返回:0.222222222222222 ``` 范例二:FuzzyCompareEx相似性计算,指定字符切分长度为1 ```tsl t := fuzzyCompareEx(fzJaccard(), "kitten", "sitting", 1, nret); return array(t, nret); // 返回:array(0.428571428571429,3) // 算法对比解析: FuzzyCompare:字符切分长度为2,字符串"kitten"切分后的集合为:{ki, it, tt, te, en},"sitting"为:{si, it, tt, ti, in, ng};交集:{it, tt},并集:{ki, it, tt, te, en, si, ti, in, ng},相似度为2/9(即0.222222222222222) FuzzyCompareEx:指定字符切分长度为1,字符串"kitten"切分后的集合为:{k, i, t, e, n},"sitting"为:{s, i, t, n, g},交集:{i, t, n},并集:{k, i, t, e, n, s, g},相似度为3/7(即0.428571428571429) ``` ## `fzCosine()` Cosine(余弦相似度)算法类型:将字符串根据指定长度n(默认值为2)划分为两个字符集合,将字符集合转换为向量,计算两向量夹角的余弦值。 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算,字符切分长度为2 ```tsl return fuzzyCompare(fzCosine(), "kitten", "sitting"); // 返回:0.365148371670111 ``` 范例二:FuzzyCompareEx相似性计算,指定字符切分长度为1 ```tsl return fuzzyCompareEx(fzCosine(), "kitten", "sitting", 1, nret); // 返回:0.746202507244636 // 算法对比解析: FuzzyCompare:字符切分长度为2,字符串"kitten"切分后的集合为:{ki, it, tt, te, en},"sitting":{si, it, tt, ti, in, ng};转换成向量分别为:[1, 1, 1, 1, 1, 0, 0, 0, 0]、[0, 1, 1, 0, 0, 1, 1, 1, 1],代入算法中,计算出的相似度为0.365148371670111 FuzzyCompareEx:字符切分长度为1,字符串"kitten"切分后的集合为:{k, i, t, e, n},"sitting":{s, i, t, n, g},转换成向量分别为:[1, 1, 2, 1, 1, 0, 0]、[0, 2, 2, 0, 1, 1, 1],代入算法中,计算出的相似度为0.746202507244636 ``` ## `fzJaroWinkler()` Jaro-Winkler距离算法类型:先统计两字符串的匹配字符数与换位次数,并代入Jaro距离算法公式,得到相似度,再根据两字符串的公共前缀长度给予额外加权,得到最终的相似度 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算 ```tsl return fuzzyCompare(fzJaroWinkler(), "kitten", "sitting"); // 返回:0.746031746031746 ``` 范例二:FuzzyCompareEx相似性计算 ```tsl return fuzzyCompareEx(fzJaroWinkler(), "kitten", "sitting", n, nret); // 返回:0.746031746031746 ``` ## `fzSimHash()` SimHash(局部敏感哈希)算法类型:对字符串分词并计算加权哈希生成二进制指纹,比较两个指纹间的对应位置上不同字符的数量 返回:integer ### 示例 ```tsl // 应用于两字符串的相似性计算的相关模型中,如FuzzyCompare与FuzzyCompareEx。 ``` 范例一:FuzzyCompare相似性计算,特征词数量为3 ```tsl return fuzzyCompare(fzSimHash(), "kitten", "sitting"); // 返回:0.640625 ``` 范例二:FuzzyCompareEx相似性计算,特征词数量为1 ```tsl t := fuzzyCompareEx(fzSimHash(), "kitten", "sitting", 1, nret); return array(t, nret); // 返回:array(0.921875,5) ``` ## `formatStrExt(s)` 判断字符串是否是字符串,不是字符串的显示为“-” | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return formatStrExt('aaaaa'); // 结果:’aaaaa’ return formatStrExt(123); // 结果:’-’ ``` ## `seprateStrToTotal(s)` 把用;分割的字符串转换为#分割 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return seprateStrToTotal('债券型;现金型;配置型;股票型;保本型'); // 结果:’债券型#现金型#配置型#股票型#保本型’ ``` ## `totalStrToSeprate(s)` 把用#分割的字符串转换为;分割 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return totalStrToSeprate ('债券型#现金型#配置型#股票型#保本型'); // 结果:’债券型;现金型;配置型;股票型;保本型’ ``` ## `dateStrToArr(end_dates, sep1, sep2)` 把日期区间字符串转换为列表 | 参数 | 类型 | 说明 | | ----------- | ------ | -------------------- | | `end_dates` | string | 日期区间字符串 | | `sep1` | string | 日期区间字符串分割符 | | `sep2` | string | 开始和截止日期分割符 | 返回:array ### 示例 ```tsl return dateStrToArr('2007-9-10;2007-9-10', '$', ';'); // '$'表示结束位置 // 输出: // 示例包含说明文字,未作为可执行片段运行。 ``` ## `rDateStrToArr(rdate_list)` 把报告期字符串转换为列表 | 参数 | 类型 | 说明 | | ------------ | ------ | ------------------------------------------ | | `rdate_list` | string | 字符串,报告期字符串,多个报告期以分号区分 | 返回:array ### 示例 ```tsl return rDateStrToArr('20070331;20070630'); // 输出: // Execute script error at Line:1 // function:__main__:line 1:instruction:usercall: function:rDateStrToArr compile error or not found // function:__main__:line 1:instruction:usercall: function execute error ``` ## `replaceStrByReg(s, reg_from_text, to_text)` 正则表达式快速字符串替换,大小写敏感。 | 参数 | 类型 | 说明 | | --------------- | ------ | -------------------------------- | | `s` | string | 字符串。源串 | | `reg_from_text` | string | 字符串。待替换的部分,正则表达式 | | `to_text` | string | 字符串。替换的字符串 | 返回:string ### 示例 ```tsl return replaceStrByReg("abcdeak", "A", "kkkk"); // 结果:abcdeak ``` ## `replaceTextByReg(s, reg_from_text, to_text)` 正则表达式快速字符串替换,大小写不敏感。 | 参数 | 类型 | 说明 | | --------------- | ------ | -------------------------------- | | `s` | string | 字符串。源串 | | `reg_from_text` | string | 字符串。待替换的部分,正则表达式 | | `to_text` | string | 字符串。替换的字符串 | 返回:string ### 示例 ```tsl return replaceTextByReg("abcdeak", "a", "kkkk"); // 结果:kkkkbcdekkkkk ``` ## `parseRegExpr3(s, reg_from_text, to_text, parse_ctrls)` 直接返回输出的正则表达式解析。 | 参数 | 类型 | 说明 | | --------------- | ------ | -------------------------------- | | `s` | string | 字符串。源串 | | `reg_from_text` | string | 字符串。待替换的部分,正则表达式 | | `to_text` | string | 字符串。替换的字符串 | | `parse_ctrls` | string | 字符串。正则表达式控制串 | 返回:string ### 示例 ```tsl return parseRegExpr3("abcdeak", "ab", "kkkk", "ir"); // 结果:kkkkcdeak ``` ## `floatToStrneW(value)` 将实数转换成宽字节字符串类型。和FloatToStrW的区别:在处理大数量级数据(如1E15、10^15等)时,FloatToStrneW的结果不会输出为1E15等格式。 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 ```tsl return floatToStrneW(1234.1234); // 输出:L"1234.1234" return floatToStrneW(1E15); // 大数量级数据,输出:L"1000000000000000" ``` ## `hztoPy(hz)` 汉字翻译为拼音 | 参数 | 类型 | 说明 | | ---- | ------ | ----------- | | `hz` | string | String 汉字 | 返回:string ### 示例 ```tsl return hztoPy("华夏优势"); // HXYS return hztoPy("华夏盛势"); // HXCS HXSS ```