# Builtin - 字符串 ## `adjustLineBreaks(s, style)` 声明:function 统一字符串中的换行符。`style` 为 0 时使用换行符,为 1 时使用回车加换行符;也支持数组批量处理。 | 参数 | 类型 | 说明 | | ------- | ------------------- | -------------------------- | | `s` | string\|array | 要调整的字符串或字符串数组 | | `style` | TTextLineBreakStyle | 0 表示 LF,1 表示 CRLF | 返回:string|array ### 示例 ```tsl echo adjustLineBreaks("a\r\nb", 0); // 输出: // a // b ``` ## `ansiCompareFileName(s1, s2)` 声明:function 比较两个文件名,返回>0当S1>S2,=0当S1=S2,<0当S12, 0); // 输出:0 ``` ## `boolToStr2(b)` 声明:function 将布尔型转换成字符串类型并返回。如果B为真,函数返回'true',如果B为假,返回' False'。若想返回’-1’与’0’的结果可用BoolToStr实现。 | 参数 | 类型 | 说明 | | ---- | ---- | ------ | | `b` | bool | 布尔型 | 返回:string ### 示例 ```tsl echo boolToStr2(2>1); // 返回’ True’ ``` ## `boolToStrw(b)` 声明:function 将布尔型转换成宽字节字符串类型并返回。与BoolToStr的区别是,BoolToStr返回的是多字节字符串,而BoolToStrw返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ---- | ------ | | `b` | bool | 布尔型 | 返回:string ### 示例 ```tsl echo boolToStrw(2>1); // 返回宽字节字符串:-1 ``` ## `boolToStrw2(b)` 声明:function 将布尔型转换成宽字节字符串类型并返回。与BoolToStr2的区别是,BoolToStr2返回的是多字节字符串,而BoolToStrw2返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ---- | ------ | | `b` | bool | 布尔型 | 返回:string ### 示例 ```tsl echo boolToStrw2(2>1); // 返回宽字节字符串:True ``` ## `byteToCharIndex(s, index)` 声明:function 字节索引到字符索引的转换。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字节位置 | 返回:integer ### 示例 ```tsl // 返回第30字节位置时,是第几个字符位置 // 其中‘天软’占有4个字节,其余每个字符占1个字节 s := "天软Tinysoft Statistical analysis Language"; echo byteToCharIndex(s, 30); // 输出:28 ``` ## `byteToCharLen(s, max_len)` 声明:function 判断字符流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); echo b1; // 输出:28 ``` ## `byteType(s, index)` 声明:function 返回字符串的指定位置的字符的类型,类型为:0 单字节字符,1 多字节的引导字节, 2 多字节的结尾字节。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------------- | | `s` | string | 字符串, | | `index` | integer | 整数,指定字符的位置 | 返回:tmbcsbytetype ### 示例 范例01: ```tsl // 单字节字符‘t’ echo byteType("2011 tinysoft", 6); // 输出:0 ``` 范例02: ```tsl // 多字节字符‘天’ echo byteType("2011 tinysoft天软", 14); // 输出:1 ``` 范例03: ```tsl // 多字节字符‘软’,且为最后一个字符 echo byteType("2011 tinysoft天软", 15); // 输出:2 ``` 范例04: ```tsl // 单字节字符‘1’,最后一个字符 echo byteType("2011 ", 4); // 输出:0 ``` ## `changeFileExt(file_name, extension)` 声明:function 更改文件的扩展名。该函数并不实际更名指定的文件,其仅仅只是创建一个新的文件名字符串。此函数支持多字节字符集。 | 参数 | 类型 | 说明 | | ----------- | ------ | ----------------------- | | `file_name` | string | 文件名。 | | `extension` | string | 新的扩展名,需包含’.’。 | 返回:string ### 示例 ```tsl // 实际 D 盘的 test.tsl 没有改变 echo changeFileExt("D:\\test.tsl", ".txt"); // 输出:D:\test.txt ``` ## `charLength(s, index)` 声明:function 指定位置的字符所包含的字节数。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字符位置 | 返回:integer ### 示例 ```tsl // 第2个字符‘软’的字节数 s := "天软Tinysoft Statistical analysis Language"; echo charLength(s, 2); // 输出:2 ``` ## `charToByteIndex(s, index)` 声明:function 字符索引到字节索引的转换。 | 参数 | 类型 | 说明 | | ------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字符位置 | 返回:integer ### 示例 ```tsl // 返回第30字符对应的字节位置 // 其中‘天软’占有4个字节,其余每个字符占1个字节 s := "天软Tinysoft Statistical analysis Language"; echo charToByteIndex(s, 30); // 输出:32 ``` ## `charToByteLen(s, max_len)` 声明:function 判断字符串S中最多MaxLen的字符中占有的字节数。 | 参数 | 类型 | 说明 | | --------- | ------- | -------------- | | `s` | string | 字符串,源串 | | `max_len` | integer | 整数,字符个数 | 返回:integer ### 示例 ```tsl // 在S字符串中取30个字符,统计其所占的字节数。 // 其中‘天软’占有4个字节,其余每个字符占1个字节,由此,30个字符占有32个字节 s := "天软Tinysoft Statistical analysis Language"; b1 := charToByteLen(s, 30); echo b1; // 输出:32 ``` ## `chr(value)` 声明:function 返回ascii码的值为value的字符 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:string ### 示例 ```tsl a_value := chr(50); echo a_value; // 输出:字符串'2' ``` ## `compareStr(s1, s2)` 声明:function 字符串比较,如果S1大于S2,则返回正数,如果相等,返回0,否则返回负数 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------- | | `s1` | string | 字符串,比较字符1 | | `s2` | string | 字符串,比较字符2 | 返回:integer ### 示例 ```tsl result := compareStr("万科A", "万科A"); echo result < 0; // 输出:1,表示左侧字符串小于右侧字符串 ``` ## `compareText(s1, s2)` 声明:function 字符串比较,如果S1大于S2,则返回正数,如果相等,返回0,否则返回负数 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------- | | `s1` | string | 字符串,比较字符串1 | | `s2` | string | 字符串,比较字符串2 | 返回:integer ### 示例 范例01: ```tsl echo compareText("SZ000002", "SZ000001"); // 输出:1 ``` 范例02: ```tsl echo compareText("SZ000001", "sz000001"); // 输出:0 ``` 范例03: ```tsl result := compareText("万科A", "万科A"); echo result > 0; // 输出:1,表示左侧字符串大于右侧字符串 ``` ## `concat(s_n)` 声明:function 返回s1+s2+s3+…sn合并的字符串,支持unicode串(宽字节字符集)进行合并。 | 参数 | 类型 | 说明 | | ----- | ------ | ------ | | `s_n` | string | 字符串 | 返回:string ### 示例 范例01: ```tsl arr := concat("thank-", "you-", "very-", "much! "); echo arr; // 输出:thank-you-very-much! ``` 范例02:Unicode字符串的合并 ```tsl s1 := multiByteToUnicodew('天软', 936); s2 := inttostrw(2020); echo concat(s1, s2); // 输出宽字节字符串:天软2020 ``` ## `containsStr(a_text, a_sub_text)` 声明:function 判定指定的字符串AsubTexts是否是Atext字符串的子串。返回布尔型真假值,字符串AsubTexts是Atext字符串的子串,就返回真,否则返回假。可以处理非MBCS的原始字符串。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_text` | string | 字符串类型,源串 | | `a_sub_text` | string | 字符串型,子串 | 返回:bool ### 示例 ```tsl a := '2020Tinysoft 天软'; b := 'tinysoft'; c := 'Tinysoft'; echo trim(toStn(array(containsStr(a, b), containsStr(a, c)))); // 输出:array(0,1) ``` ## `containsText(a_text, a_sub_text)` 声明:function 判断源字符串是否包含指定子串,比较时不区分大小写。 | 参数 | 类型 | 说明 | | ------------ | ------ | ------------ | | `a_text` | string | 源字符串 | | `a_sub_text` | string | 要查找的子串 | 返回:bool ### 示例 ```tsl echo containsText("TinySoft", "soft"); // 输出:1 ``` ## `copy(s, index, count)` 声明:function 字符串拷贝函数,将字符串S的第Index个字符开始,拷贝出Count个字符组成字符串返回,或者说取S的子字符串出来。如果Index大于字符串长度,则返回空字符串,如果拷贝的内容超过了字符串长度,则只返回从第Index个字符到S字符串结尾的部分 | 参数 | 类型 | 说明 | | ------- | ------- | --------------------------------- | | `s` | string | 字符串类型,源串 | | `index` | integer | 整数,开始字符,字符串位置从1计起 | | `count` | integer | 整数,字符个数 | 返回:string ### 示例 ```tsl a := copy('thank you', 3, 6); echo a; // 输出字符串:ank yo ``` ## `currToStr(value)` 声明:function 将Currency型的实数转换成字符串类型返回 | 参数 | 类型 | 说明 | | ------- | -------- | ---- | | `value` | currency | 实数 | 返回:string ### 示例 ```tsl echo currToStr(23.24); // 输出字符串:"23.24" ``` ## `currtoStrw(value)` 声明:function 将Currency型的实数转换成宽字节字符串类型返回 | 参数 | 类型 | 说明 | | ------- | -------- | ---- | | `value` | currency | 实数 | 返回:string ### 示例 ```tsl echo currtoStrw(23.24); // 输出字符串:"23.24" ``` ## `decoderadixstr(s, presufflen, radix)` 声明:function 对指定进制格式的源码字符串进行解码。与Encoderadixstr的功能相反。 | 参数 | 类型 | 说明 | | ------------ | ------ | --------------------------------------------------------------------------------------------------------------------- | | `s` | string | 字符串 | | `presufflen` | int | 整型,前缀或者后缀长度。 | | `radix` | int | 整数,最高位(31位)为1的时候,表明为后缀方式,否则为前缀模式。第30位为1表明采用小写字母。低6位为进制,最大支持36进制。 | 返回:string ### 示例 ```tsl echo decoderadixstr("0x310x310x320x32", 2, 16), "\n"; // 输出:1122 ``` ## `decoderadixwstr(s, presufflen, radix)` 声明:function 对指定进制指定格式的宽字节源码串进行解码。与Encoderadixwstr的功能相反。 | 参数 | 类型 | 说明 | | ------------ | ------ | --------------------------------------------------------------------------------------------------------------------- | | `s` | string | 字符串 | | `presufflen` | int | 整型,前缀或者后缀长度。 | | `radix` | int | 整数,最高位(31位)为1的时候,表明为后缀方式,否则为前缀模式。第30位为1表明采用小写字母。低6位为进制,最大支持36进制。 | 返回:string ### 示例 ```tsl echo decoderadixwstr("0x00310x00310x00320x0032", 2, 16) = "1122", "\n"; // 输出:1 ``` ## `decodeSoundexInt(a_value)` 声明:function 是SoundexInt函数的反函数,将表示发音的整数转成发音的字符串(SoundEx Codes)。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------ | | `a_value` | integer | 整数,表示发音特征的整数 | 返回:string ### 示例 ```tsl test_str := "Tinysoft SoundexInt:返回表示AText的发音的整数"; test_str := decodeSoundexInt(soundexInt(test_str, 4)); echo test_str; // 输出:T521 ``` ## `decodeSoundexWord(a_value)` 声明:function 是SoundexWord函数的反函数,将表示发音的整数转成发音的字符串(SoundEx Codes)。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------ | | `a_value` | integer | 整数,表示发音特征的整数 | 返回:string ### 示例 ```tsl test_str := "Tinysoft SoundexInt:返回表示AText的发音的整数"; test_str := decodeSoundexWord(soundexWord(soundEx(test_str, 4))); // 24206 echo test_str; // 输出:T000 ``` ## `decodeUri(s)` 声明:function 将URI中的十六进制转义序用它们表示的字符替换 | 参数 | 类型 | 说明 | | ---- | ------ | --------------------------------------- | | `s` | string | 字符串,由EncodeURI (s)函数编码的字符串 | 返回:string ### 示例 ```tsl echo decodeUri("https://example.com/a+b?x=1&y=2"); // 输出:https://example.com/a b?x=1&y=2 ``` ## `decodeUriComponent(s)` 声明:function 将URI中的十六进制转义序用它们表示的字符替换 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,由EncodeURIComponent(s)函数编码的字符串 | 返回:string ### 示例 ```tsl echo decodeUriComponent("a+b%2Fc%3Fd%3De%26f"); // 输出:a b/c?d=e&f ``` ## `dupeString(a_text, a_count)` 声明:function 返回将指定的字符串AText重复ACount次后的字符串 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------- | | `a_text` | string | 字符串类型,源串 | | `a_count` | integer | 整数,重复的次数 | 返回:string ### 示例 ```tsl s := dupeString('Ha', 5); echo s; // 输出:表示将S的值变为'HaHaHaHaHa' ``` ## `encoderadixstr(s, presuff, radix)` 声明:function 将字符串转换为指定进制格式的源码。 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------------------------------------------------------------------------------------------------- | | `s` | string | 字符串 | | `presuff` | string | 字符串,指定的前缀或者后缀串。 | | `radix` | int | 整数,最高位(31位)为1的时候,表明为后缀方式,否则为前缀模式。第30位 为1表明采用小写字母。低6位为进制,最大支持36进制。 | 返回:string ### 示例 ```tsl echo encoderadixstr("1122", "0x", 16), "\n"; // 输出:0x310x310x320x32 ``` ## `encoderadixwstr(s, presuff, radix)` 声明:function 将字符串按宽字节码转换成指定进制格式的源码。而Encoderadixstr是按多字节字码进行转换。 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------------------------------------------------------------------------------------------------- | | `s` | string | 字符串 | | `presuff` | string | 字符串,指定的前缀或者后缀串。 | | `radix` | int | 整数,最高位(31位)为1的时候,表明为后缀方式,否则为前缀模式。第30位 为1表明采用小写字母。低6位为进制,最大支持36进制。 | 返回:string ### 示例 ```tsl echo encoderadixwstr("1122", "0x", 16) = "0x00310x00310x00320x0032", "\n"; // 输出:1 ``` ## `encodeUri(s)` 声明:function 将URI中的某些字符用十六进制的转义序列进行替换 | 参数 | 类型 | 说明 | | ---- | ------ | --------------------------------- | | `s` | string | 字符串含有 URI 或其他要编码的文本 | 返回:string ### 示例 ```tsl echo encodeUri("https://example.com/a b?x=1&y=2"); // 输出:https://example.com/a+b?x=1&y=2 ``` ## `encodeUriComponent(s)` 声明:function 将URI中的某些字符用十六进制的转义序列进行替换 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------- | | `s` | string | 字符串,含有URI或其他要编码的字符串 | 返回:string ### 示例 ```tsl echo encodeUriComponent("a b/c?d=e&f"); // 输出:a+b%2Fc%3Fd%3De%26f ``` ## `endsStr(a_sub_text, a_text)` 声明:function 判别一个字符串ASubText是否是另一个字符串AText的结尾。如果ASubText 是Atext的结尾,就返回真,否则返回假。可以处理非MBCS的原始字符串。与EndsText函数不同,字符串的匹配是大小写敏感的。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; echo endsStr('efg', text); // 输出:1 ``` ## `endsText(a_sub_text, a_text)` 声明:function 判别一个字符串ASubText是否是另一个字符串AText的结尾。如果ASubText 是Atext的结尾,就返回真,否则返回假。可以处理非MBCS的原始字符串。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; echo endsText('Efg', text); // 输出:1 // 差异说明:对空字符串,Windows 判定为 1、Linux 为 0(如 endsText("", "A"));其它表现无差别。 ``` ## `excludeTrailingBackslash(s)` 声明:function 去掉路径的’\’结尾。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo excludeTrailingBackslash("D:\\Tinysoft\\tslweb\\web\\"); // 输出: D:\Tinysoft\tslweb\web ``` ## `excludeTrailingPathDelimiter(s)` 声明:function 去掉路径的’\’结尾。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo excludeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web\\"); // 输出: D:\Tinysoft\tslweb\web ``` ## `exportjsonstring(data, n)` 声明:function 将TSL结构数据转换为json串。对于非ASCII编码的文字转换为转义字符。 | 参数 | 类型 | 说明 | | ------ | ------- | ----------------------------------------------------------------------------- | | `data` | | 天软数据,任意数据类型。 | | `n` | integer | 可选参数,要保留的小数位数。为0时保留1位小数,大于16或小于0时保留全部小数位数 | 返回:string ### 示例 范例01:将天软含中文的字符串转化为json串 ```tsl s := "万科A"; echo exportJsonString(s); // 返回字符串:"\u4E07\u79D1A" ``` 范例02:将数组转化为json串 ```tsl s := array("A": 123, "B": "Tinysof 2026"); echo exportJsonString(s); // 返回字符串:{\"A\":123,\"B\":\"Tinysof 2026\"} ``` 范例03:将数组转化为json串,并保留2位小数 ```tsl s := array((1.3245, 2.5123), ('Tinysoft天软', '天软科技')); echo exportJsonString(s, 2); // 返回字符串:[[1.32,2.51],["Tinysoft\u5929\u8F6F","\u5929\u8F6F\u79D1\u6280"]] ``` ## `exportJsonStringMbcs(data, n)` 声明:function 将TSL结构数据转换为json串。和ExportJSONString不同的是,该函数不会对中文进行转码处理,保留中文原码。 | 参数 | 类型 | 说明 | | ------ | ------- | ----------------------------------------------------------------------------- | | `data` | | 天软数据,任意数据类型。 | | `n` | integer | 可选参数,要保留的小数位数。为0时保留1位小数,大于16或小于0时保留全部小数位数 | 返回:string ### 示例 范例01:将天软含中文的字符串转化为json串 ```tsl s := "万科A"; echo exportJsonStringMbcs(s); // 返回字符串:"\"万科A\"" ``` 范例02:将数组转化为json串 ```tsl s := array((1, 'a'), ('Tinysoft天软', '天软科技')); echo exportJsonStringMbcs(s); // 返回字符串:"[[1,\"a\"],[\"Tinysoft天软\",\"天软科技\"]]" ``` 范例03:将数组转化为json串,并保留2位小数 ```tsl s := array((1.3245, 2.5123), ('Tinysoft天软', '天软科技')); echo exportJsonStringMbcs(s, 2); // 返回字符串:"[[1.32,2.51],[\"Tinysoft天软\",\"天软科技\"]]" ``` ## `exportJsonStringUtf8(data, n)` 声明:function 将天软数组转换为UTF8编码的Json串,解决与第三方交互时的转码问题。 | 参数 | 类型 | 说明 | | ------ | ------- | ----------------------------------------------------------------------------- | | `data` | | 天软数据,任意数据类型。 | | `n` | integer | 可选参数,要保留的小数位数。为0时保留1位小数,大于16或小于0时保留全部小数位数 | 返回:string ### 示例 范例01: ```tsl a := array( ("StockID": "SZ000002", "StockName": "万科A", "date": "2020-09-01", "close": 27.22), ("StockID": "SZ000002", "StockName": "万科A", "date": "2020-09-02", "close": 27.52) ); utf8_json := exportJsonStringUtf8(a); echo utf8ToAnsi(utf8_json); // 输出:UTF-8 JSON 转回当前 ANSI 代码页后的可读字符串 ``` 范例02:将数组转化为json串,并保留2位小数 ```tsl s := array((1.3245, 2.5123), ('Tinysoft天软', '天软科技')); utf8_json := exportJsonStringUtf8(s, 2); echo utf8ToAnsi(utf8_json); // 输出:[[1.32,2.51],["Tinysoft天软","天软科技"]] ``` ## `extractFileDir(file_name)` 声明:function 返回文件名的驱动器以及目录部分,即文件所在的目录,若非驱动根目录则不包含\。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo extractFileDir("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // D:\Tinysoft\tslweb\web // 差异说明 // 对于路径的处理,在不同系统中存在差异。如Linux中就没有驱动的概念,因此,在处理带驱动的路径时: // 如对于根目录的处理extractfiledir("C:\\abc.txt"),Windows中返回”C: \”而Linux中返回”C: ” ``` ## `extractFileDrive(file_name)` 声明:function 返回文件名的驱动器部分。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl drive := extractFileDrive("D:\\Tinysoft\\tslweb\\web\\test.tsl"); echo ifThen(length(drive) > 0, drive, "当前系统无盘符"); // Windows 输出:D: // Linux 输出:当前系统无盘符 ``` ## `extractFileExt(file_name)` 声明:function 返回文件的扩展名部分,其中包括”.”部分。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo extractFileExt("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:.tsl ``` ## `extractFileName(file_name)` 声明:function 返回文件名的去掉路径后的纯文件名部分。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo extractFileName("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:test.tsl ``` ## `extractFilePath(file_name)` 声明:function 返回文件名的驱动器以及目录部分,包含\。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `file_name` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo extractFilePath("D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:D:\Tinysoft\tslweb\web\ ``` ## `extractRelativePath(base_name, dest_name)` 声明:function 返回DestName文件相对于BaseName的相对路径名。 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------- | | `base_name` | string | 字符串,文件路径及文件名1 | | `dest_name` | string | 字符串,文件路径及文件名2 | 返回:string ### 示例 ```tsl echo extractRelativePath("D:\\test.tsl", "D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:Tinysoft\tslweb\web\test.tsl // 差异说明 // 由于Linux系统中无盘符概念,所以不支持该功能。 ``` ## `floatToStr(value)` 声明:function 将实数转换成字符串类型。和FloatToStrne的区别:在处理浮点数据时,FloatToStr的结果会输出为1E15等格式 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 范例01: ```tsl echo floatToStr(23.4); // 输出字符串:"23.4" ``` 范例02: ```tsl echo floatToStr(1E15); // 大数量级数据,输出:"1E15" ``` ## `floattoStrw(value)` 声明:function 将实数转换成宽字节字符串类型。和FloatToStrneW的区别:在处理大数量级数据(如1E15、10^15等)时,FloatToStrW的结果会输出为1E15等格式。 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 范例01: ```tsl echo floattoStrw(1234.1234); // 输出:L"1234.1234" ``` 范例02: ```tsl echo floattoStrw(1E15); // 大数量级数据,输出:L"1E15" ``` ## `format(formatstr, v1, v2, v3)` 声明:function 返回根据 formatstr 设定的格式将 v1,v2,v3,… 参数连成字符串返回。 在占位计算时,Format 把一个汉字当作**一个**位置;如需把一个汉字当作**两个**位置,请用 `AnsiFormat`(参数定义与 Format 完全一致)。 | 参数 | 类型 | 说明 | | ------------ | ------ | ----------------------------------------------- | | `formatstr` | string | 格式串,由基本文本与 `%` 占位符组成,写法见下文 | | `v1, v2, v3` | any | 依次对应各占位符的值,个数不限 | 格式串由基本文本字符和占位符组成:基本文字按原样显示,占位符(由 `%` 标出)依次对应 v1,v2,v3,… 各参数。单个占位符的完整写法(各段紧挨、顺序固定、中间不能有空格): ```txt %[index:][-][width][.prec]TYPE ``` `[]` 内为可选段,其中 `index` 后的冒号 `:` 和 `prec` 前的点 `.` 都是**字面量**,写在格式串里。各段含义: | 段 | 含义 | | -------- | -------------------------------------------------------------------------- | | `index:` | 参数索引 + 冒号,指明用第几个参数(从 0 开始);省略时按出现顺序依次取参数 | | `-` | 向左对齐(省略则右对齐、左侧补空格) | | `width` | 最小显示宽度(字符数);实际长度不足时补空格 | | `.prec` | 点 + 精度;对 `f/e/n/m` 表示小数位数,对 `g` 表示有效位数 | | `TYPE` | 输出类型字母(见下表),**必填** | 拆解示例:`%2:-8.2f` = 用第 2 个参数(`2:`)、左对齐(`-`)、最小宽度 8(`8`)、保留 2 位小数(`.2`)、浮点输出(`f`)。 补充规则: - TYPE 字母**大小写等价**(`%f` 与 `%F` 相同,`%d` 与 `%D` 相同)。 - 输出字面量 `%` 用 `%%`(如 `format("%d%%", 50)` → `50%`)。 - 省略 `index:` 时,占位符个数应与参数个数对应;用了 `index:` 则可任意引用、重复引用参数。 `TYPE`(`%` 后的字母)指定输出数据类型;若与对应参数类型不匹配将产生运行时错误: | 符号 | 含义 | | --------------- | -------------------------------------------- | | `D` decimal | 整型值 → 十进制数字字符串 | | `X` hexadecimal | 整型值 → 十六进制数字字符串 | | `S` String | 拷贝字符串/字符/字符指针值到输出字符串 | | `E` exponential | 浮点值 → 指数表示字符串 | | `F` floating | 浮点值 → 浮点表示字符串 | | `G` general | 浮点值 → 最短的十进制字符串(浮点或指数) | | `N` number | 浮点值 → 带千位分隔符的浮点值 | | `m` money | 浮点值 → 现金数量表示字符串(Currency 类型) | > 注:新一代 tsl 语言中 `%f`、`%g`、`%n` 支持复数。 返回:string ### 示例 范例00:(基础用法 —— 顺序占位、%s 字符串、%% 转义) ```tsl echo format("Name: %s, Age: %d, Rate: %d%%", "Tom", 18, 50); // 输出字符串:Name: Tom, Age: 18, Rate: 50% ``` 范例01:(D 和X的使用范例) ```tsl // 指定前2个数值转化为十进制数字字符串,第3个整数转化成十六进制字符串,3个数值必须是整数。 // 第2个转化%-5d:由于3只有1位,需要左对齐,则在右边添加4位空格 echo format('%d,%-5d,%X', 4, 3, 12); // 输出字符串:4,3 ,C ``` 范例02:(E的使用范例) ```tsl // .1表示后面的小数位的精度。注意,v必须是一个浮点数,比如1234400.0,如果是1234400则被认为是整数,执行函数报错 echo format("%.1E", 1234400.0); // 输出字符串:1.2E+006 ``` 范例03:(F的使用范例) ```tsl echo format("%.1f", 1234400.56789); // 输出字符串: 1234400.6 ``` 范例04:(G的使用范例) ```tsl echo format("%G", 1.2E+006); // 输出字符串:1200000 ``` 范例05:(N的使用范例) ```tsl echo format("%.1N", 1234400.56789); // 输出:取决于当前系统区域设置 ``` 范例06:(M的使用范例) ```tsl echo format("%.1M", 1234400.56789); // 输出:取决于当前系统货币格式 ``` 范例七:(参数的索引) ```tsl echo format('%2:d,%1:5d,%0:X', 14, 3, 12); // 输出字符串:12, 3,E ``` ## `formatCurr(format, value)` 声明:function 将实数Value根据参数Format设定格式转换成字符串返回 | 参数 | 类型 | 说明 | | -------- | -------- | -------------- | | `format` | string | 字符串,格式串 | | `value` | currency | 实数 | 返回:string ### 示例 ```tsl echo formatCurr('0.000E+00', 232.24); // 输出:2.322E+02 ``` ## `formatFloat(format, value)` 声明:function 将实数Value根据参数Format设定格式转换成字符串返回 | 参数 | 类型 | 说明 | | -------- | ------ | -------------- | | `format` | string | 字符串,格式串 | | `value` | real | 实数 | 返回:string ### 示例 ```tsl echo formatFloat('0.000E+00', 23224); // 科学计数 // 输出字符串:"2.322E+04" ``` ```tsl echo formatFloat('##,###.00', 123); // 千分位 + 两位小数 // 输出字符串:"123.00" ``` ```tsl echo formatFloat('00,000.00', 123); // 零填充 // 输出:00123.00 ``` ## `getChar(s, index)` 声明:function 取字符串/二进制流中相应位置的ascii码。Char为0-255之间的整数类型 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------- | | `s` | string | 字符串/二进制,源串 | | `index` | integer | 整数,取数位置 | 返回:char ### 示例 ```tsl arr := getChar("i am a student", 9); echo arr; // 输出: 116 ``` ## `getFormatLocalCode()` 声明:function 获得当前Format等函数默认使用的地区区域码,-1为默认格式,0为当前系统所属地区码。 返回:integer ### 示例 ```tsl setFormatLocalCode(0); echo getFormatLocalCode(); // 输出:0 ``` ## `getLikeFlag()` 声明:function 返回Like操作符号的正则表达式的默认控制状态。即获得SetLikeFlag设置的状态,默认为1。 返回:integer ### 示例 ```tsl s := "ParseRegExpr 2011 \r\n ShenZhenTinysoft (TSL)"; reg := "(\\d+).*(tinysoft)"; setLikeFlag(0b0001+0x0010); // 大小写无关+使 '.' 特殊字符匹配任意字符 r := s like reg; echo getLikeFlag(); // 获取当前正则控制符状态 // 返回17 ``` ## `getMsgDigest(s, mode)` 声明:function 计算字符串s的摘要,返回摘要的字符串 | 参数 | 类型 | 说明 | | ------ | ------- | ---------------- | | `s` | string | 计算摘要的字符串 | | `mode` | integer | 摘要算法编号 | `mode` 支持以下摘要算法: | mode | 算法 | | ---: | ------ | | 0 | CRC32 | | 1 | MD5 | | 2 | SHA1 | | 3 | SHA224 | | 4 | SHA256 | | 5 | SHA384 | | 6 | SHA512 | | 256 | SM3 | 返回:string ### 示例 ```tsl digests := array( "CRC32": getMsgDigest("hello", 0), "MD5": getMsgDigest("hello", 1), "SHA1": getMsgDigest("hello", 2), "SHA224": getMsgDigest("hello", 3), "SHA256": getMsgDigest("hello", 4), "SHA384": getMsgDigest("hello", 5), "SHA512": getMsgDigest("hello", 6), "SM3": getMsgDigest("hello", 256) ); echo trim(toStn(digests)); // 输出: // CRC32=3610A686 // MD5=5D41402ABC4B2A76B9719D911017C592 // SHA1=AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D // SHA224=EA09AE9CC6768C50FCEE903ED054556E5BFC8347907F12598AA24193 // SHA256=2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824 // SHA384=59E1748777448C69DE6B800D7A33BBFB9FF1B463E44354C3553BCDB9C666FA90125A3C79F90397BDF5F6A13DE828684F // SHA512=9B71D224BD62F3785D96D46AD3EA3D73319BFBC2890CAADAE2DFF72519673CA72323C3D99BA5C11D7C7ACC6E14B8C5DA0C4663475C2E5C3ADEF46F73BCDEC043 // SM3=BECBBFAAE6548B8BF0CFCAD5A27183CD1BE6093B1CCECCC303D9C61D0A645268 ``` ## `getMsgDigest(alias, filename, mode)` 声明:function 计算 `filename` 指定文件的摘要并返回摘要字符串。`alias` 的使用方式与 `ReadFile` 的目录别名一致;空字符串表示不使用目录别名。 | 参数 | 类型 | 说明 | | ---------- | ------- | ------------------------ | | `alias` | string | 文件目录别名 | | `filename` | string | 要计算摘要的文件名或路径 | | `mode` | integer | 摘要算法编号 | `mode` 支持以下摘要算法: | mode | 算法 | | ---: | ------ | | 0 | CRC32 | | 1 | MD5 | | 2 | SHA1 | | 3 | SHA224 | | 4 | SHA256 | | 5 | SHA384 | | 6 | SHA512 | | 256 | SM3 | 返回:string ### 示例 以下示例假定当前目录存在内容为 `hello` 的 `digest-example.txt`。 ```tsl filename := "digest-example.txt"; alias := ""; digests := array( "CRC32": getMsgDigest(alias, filename, 0), "MD5": getMsgDigest(alias, filename, 1), "SHA1": getMsgDigest(alias, filename, 2), "SHA224": getMsgDigest(alias, filename, 3), "SHA256": getMsgDigest(alias, filename, 4), "SHA384": getMsgDigest(alias, filename, 5), "SHA512": getMsgDigest(alias, filename, 6), "SM3": getMsgDigest(alias, filename, 256) ); echo trim(toStn(digests)); // 输出: // CRC32=3610A686 // MD5=5D41402ABC4B2A76B9719D911017C592 // SHA1=AAF4C61DDCC5E8A2DABEDE0F3B482CD9AEA9434D // SHA224=EA09AE9CC6768C50FCEE903ED054556E5BFC8347907F12598AA24193 // SHA256=2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824 // SHA384=59E1748777448C69DE6B800D7A33BBFB9FF1B463E44354C3553BCDB9C666FA90125A3C79F90397BDF5F6A13DE828684F // SHA512=9B71D224BD62F3785D96D46AD3EA3D73319BFBC2890CAADAE2DFF72519673CA72323C3D99BA5C11D7C7ACC6E14B8C5DA0C4663475C2E5C3ADEF46F73BCDEC043 // SM3=1AB21D8355CFA17F8E61194831E81A8F22BEC8C728FEFB747ED035EB5082AA2B // 当前固定 Linux 解释器的文件重载在 mode=256 时返回空输入的 SM3 摘要。 ``` ## `importjsonstring(json)` 声明:function 将json串转化为天软数据类型。 对大无符号数据会自动转换为长整型(INT64) 注意:输入的字符串应是ASCII编码的。因为JSON标准使用UTF8编码,所以请先使用天软Utf8ToAnsi将UTF8编码的字符串缓缓为ASCII编码。可参考下面的例程。 | 参数 | 类型 | 说明 | | ------ | ------ | ---------------- | | `json` | string | 字符串,json串。 | 返回:any ### 示例 ```tsl echo trim(toStn(importjsonstring('{"code":"A","value":1}'))); // 输出:array("code":"A","value":1) ``` ## `includeTrailingBackslash(s)` 声明:function 返回加上了’\’结尾的路径。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo includeTrailingBackslash("D:\\Tinysoft\\tslweb\\web"); // 输出:D:\Tinysoft\tslweb\web\ ``` 差异说明:与路径中已有的路径分隔符保持一致;当路径中不存在分隔符时,Windows 默认追加 `\`,Linux 默认追加 `/`。如在 Linux 中 `includeTrailingBackslash("/Tinysoft")` 返回 `/Tinysoft/`。 ## `includeTrailingPathDelimiter(s)` 声明:function 返回加上了’\’结尾的路径。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | 返回:string ### 示例 ```tsl echo includeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web"); // 输出:D:\Tinysoft\tslweb\web\ ``` 差异说明:与路径中已有的路径分隔符保持一致;当路径中不存在分隔符时,Windows 默认追加 `\`,Linux 默认追加 `/`。如在 Linux 中 `includeTrailingPathDelimiter("/Tinysoft")` 返回 `/Tinysoft/`。 ## `intToHex(value, digits)` 声明:function 返回整数Value转换成16进制格式的字符串,Digits为最小的数字个数,不足补0 | 参数 | 类型 | 说明 | | -------- | ------- | ------------------ | | `value` | integer | 整数 | | `digits` | integer | 整数,最小数字个数 | 返回:string ### 示例 ```tsl echo intToHex(43, 1); // 输出: 2B(二进制时候为:101011) ``` ## `intToHexw(value, digits)` 声明:function 返回整数Value转换成16进制格式的宽字节字符串,Digits为最小的数字个数,不足补0。IntToHexw返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | -------- | ------- | ------------------ | | `value` | integer | 整数 | | `digits` | integer | 整数,最小数字个数 | 返回:string ### 示例 ```tsl echo intToHexw(43, 5); // 返回宽字符串字符串:0002B ``` ## `intToStr(value)` 声明:function 整数Value转换成字符串 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:string ### 示例 ```tsl echo intToStr(43); // 输出:"43" ``` ## `inttostrw(value)` 声明:function 整数Value转换成宽字节字符串,与IntToStr的区别是,intTostrw返回的是宽字节字符串。 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:string ### 示例 ```tsl s := inttostrw(2); echo trim(toStn(array(ifString(s), ifwstring(s)))); // 输出:array(0,1) 说明返回结果串s为宽字节串,而非多字节字符串。 ``` ## `isDelimiter(delimiters, s, index)` 声明:function 判断字符串S的Index位置是否包含在Delimiters字符串中。 | 参数 | 类型 | 说明 | | ------------ | ------- | ---------------------- | | `delimiters` | string | 字符串,源串 | | `s` | string | 字符串,查找字符所在串 | | `index` | integer | 整数,指定的字符位置 | 返回:bool ### 示例 ```tsl echo isDelimiter("tinysoft", "2011 tinysoft", 6); // 输出:1 ``` ## `isPathDelimiter(s, index)` 声明:function 判断字符串S的Index位置是否是一个’\’符号。 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------ | | `s` | string | 字符串,文件路径及文件名 | | `index` | integer | 整数,字符串位置 | 返回:bool ### 示例 ```tsl echo isPathDelimiter("D:\\Tinysoft\\tslweb\\web\\test.tsl", 3); // 输出:1 ``` ## `isValidIdent(ident)` 声明:function 返回字符串Ident是否可以作为一个合法的标识符号。 | 参数 | 类型 | 说明 | | ------- | ------ | ------ | | `ident` | string | 字符串 | 返回:bool ### 示例 ```tsl echo isValidIdent('a0ffh2'); // 输出: 1 ``` ## `lastDelimiter(delimiters, s)` 声明:function 最后的分隔符在字符串S中的位置。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `delimiters` | string | 字符串,分隔符 | | `s` | string | 字符串,文件路径 | 返回:integer ### 示例 ```tsl echo lastDelimiter('\\', "D:\\Tinysoft\\tslweb\\web\\test.tsl"); // 输出:23 ``` ## `lcMapString(s, lcid, flag)` 声明:function 编码转化函数,参考WINDOWS API LCMapString。 | 参数 | 类型 | 说明 | | ------ | ------- | ------------ | | `s` | string | 字符串。 | | `lcid` | integer | 标识ID。 | | `flag` | integer | 转换的参数。 | 返回:string ### 示例 ```tsl echo lcMapString("亞洲", 0x0804, 0x2000000); // 繁体转简体字符集 // 输出: 亚洲 // 差异说明:基于 Windows API,Linux 不支持。 ``` ## `leftBStr(a_text, a_count)` 声明:function 返回Atext字符串从开始向左数ACount个字符组成的字符串。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------- | | `a_text` | string | 字符串,源串 | | `a_count` | integer | 整数,截取字符串的个数 | 返回:string ### 示例 ```tsl arr := leftBStr("i am a student", 4); echo arr; // 输出字符串:i am ``` ## `leftStr(text, num_chars)` 声明:function 返回字符串从开始向左数Num_Chars个字符组成的字符串,支持多字节语言,一个汉字当成一个字符。 | 参数 | 类型 | 说明 | | ----------- | ------- | -------- | | `text` | string | 字符串 | | `num_chars` | integer | 字符个数 | 返回:string ### 示例 ```tsl echo leftStr('abccccdddd', 2); // 输出:’ab’ ``` ## `lengthW(atext)` 声明:function 返回字符串的长度,支持多字节语言,一个汉字当成一个字符。 | 参数 | 类型 | 说明 | | ------- | ------ | -------------------------- | | `atext` | string | 字符串,需计算长度的字符串 | 返回:integer ### 示例 ```tsl test_str := "Tinysoft lengthW:汉字当成一个字符"; echo lengthW(test_str); // 输出:25(包括空格和:) ``` ## `lowerCase(s)` 声明:function 将字符串S转换成小写并返回 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl echo lowerCase("万科A"); // 输出: 万科a ``` ## `makeLcid(language_id, sort_id)` 声明:function LCID编码函数。 | 参数 | 类型 | 说明 | | ------------- | ---- | ---------------- | | `language_id` | int | 语言ID标识ID。 | | `sort_id` | int | 排序顺序标识ID。 | 返回:int ### 示例 ```tsl echo makeLcid(2052, 0); // 输出:2052 ``` ## `midBStr(a_text, astart, a_count)` 声明:function 返回Atext字符串从Astart个字符的位置开始数出ACount个字符组成的字符串,天软字符串下标从1开始。 | 参数 | 类型 | 说明 | | --------- | ------- | --------------------------- | | `a_text` | string | 字符串,源串 | | `astart` | integer | 整数,开始位置,从1开始数起 | | `a_count` | integer | 整数,截取长度 | 返回:string ### 示例 ```tsl arr := midBStr("i am a student", 6, 6); echo arr; // 输出: a stud ``` ## `midStr(a_text, astart, a_count)` 声明:function 返回Atext字符串从Astart个字符的位置开始数出ACount个字符组成的字符串。天软字符串下标从1开始。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------------------- | | `a_text` | string | 字符串数组,源串 | | `astart` | integer | 整数,开始位置,起始位置从1开始 | | `a_count` | integer | 整数,截取的字符串个数 | 返回:string ### 示例 ```tsl test_str := "Tinysoft midStr:支持多字节语言,汉字当成一个字符"; echo midStr(test_str, 10, 30); // 输出字符串:“midStr:支持多字节语言,汉字当成一个字符” ``` ## `multiByteToUnicode(s, cp)` 声明:function 把一个ANSI编码方式转换为Unicode编码。 | 参数 | 类型 | 说明 | | ---- | ------- | ---------------------------------- | | `s` | string | 字符串,ANSI字符串 | | `cp` | integer | 整数,代码页。中文为936或者54936。 | 返回:string ### 示例 ```tsl echo multiByteToUnicode("ABC", 936); // 输出:"A\0B\0C\0\0" ``` ## `multiByteToUnicodew(s, cp)` 声明:function 把一个多字节字符串转换为Unicode编码的宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ------- | ---------------------------------- | | `s` | string | 字符串,多字节字符串 | | `cp` | integer | 整数,代码页。中文为936或者54936。 | 返回:string ### 示例 ```tsl echo multiByteToUnicodew('2020 Tinysoft 天软科技', 936); // 返回宽字节字符串:2020 Tinysoft 天软科技 即L’ 2020 Tinysoft 天软科技’ ``` ## `nextCharIndex(s, index)` 声明:function 返回指定字符的开始字节的下一个字符的字节开始位置。 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------ | | `s` | string | 字符串,源串 | | `index` | integer | 整数,字符的开始字节位置 | 返回:integer ### 示例 ```tsl // ‘软’的开始字节是3,下一个字符是‘T’,‘T’的开始字节位置是5 s := "天软Tinysoft Statistical analysis Language"; echo nextCharIndex(s, 3); // 输出:5 ``` ## `ord(value)` 声明:function 如果是STRING类型返回value\[1\]的ASCII序号,就是value字符串的第一个字符的ASCII序号,如果为WIDESTRING,则为UNICODE码。 | 参数 | 类型 | 说明 | | ------- | ------ | ------------ | | `value` | string | WideString\\ | 返回:int ### 示例 ```tsl echo ord("A"); // 输出:65 ``` ## `parseRegExpr(reg_expr, parse_text, parse_ctrls, matched, matched_pos, matched_len)` 声明:function 正则表达式匹配。匹配成功返回 1,并把匹配串及子匹配组(所有匹配)写入 `matched` 数组,把对应位置和长度写入 `matched_pos`、`matched_len` 数组。匹配失败或正则编译出错时,返回字符串类型,内容为失败原因。正则表达式支持 UNICODE 字符串类型。 | 参数 | 类型 | 说明 | | ------------- | ---------------- | ---------------------------------------------------------------------- | | `reg_expr` | string | 正则表达式,基本兼容 Perl 5 的正则语法 | | `parse_text` | string | 需要被匹配的源串 | | `parse_ctrls` | string | 正则控制串,按字符组合(见下表),空串表示默认 | | `matched` | array of string | 出参,存放匹配成功的串及其中的子串。支持求值宏,最大支持 $99、$` 与 $' | | `matched_pos` | array of integer | 出参,存放匹配串及子串所处的位置 | | `matched_len` | array of integer | 出参,存放匹配串及子串的长度 | `parse_ctrls` 控制字符: | 字符 | 说明 | | ---- | ------------------------------------------------------------------------------------- | | `m` | 多行开关:启用时按换行符让每行都有起点/终点;否则整个串只有一个起点与终点 | | `i` | 大小写无关 | | `b` | NOT_BOL:首行不参与起始位置 `^` 匹配;多行开关下带 `^` 的匹配从第二行开始 | | `e` | NOT_EOL:尾行不参与结束位置 `$` 匹配;多行开关下带 `$` 的匹配在最后一行结束位置不参与 | | `s` | 单匹配模式,匹配到一个符合条件的即结束 | | `r` | 替换开关,启用时参考“定义二” | | `a` | REG_DOTALL:使 `.` 匹配任意字符(含换行符);不设时 `.` 不匹配换行符 | | `n` | REG_NOSUB:不存储子表达式信息,只返回是否匹配成功 | | `E` | REG_NOTEMPTY:禁止匹配空字符串 | | `u` | REG_UNGREEDY:非贪婪模式 | 返回:bool。1 表示匹配成功,否则返回匹配失败原因(字符串)。 ### 示例 范例01:匹配数字、指定字符串 ```tsl source := "ParseRegExpr 2011 ShenZhenTinysoft (TSL)"; parseRegExpr("(\\d+).*(Tinysoft)", source, "", result, m_pos, mlen); echo trim(toStn(result)); // 输出:array(("2011 ShenZhenTinysoft","2011","Tinysoft")) ``` 说明:输出中返回匹配的源串 "2011 ShenZhenTinysoft" 以及匹配出来的串 "2011" 和 "Tinysoft"。 1. 在匹配串中加中括号 `()` 表示将匹配的结果返回,本例中要返回的是 `(\d+)` 和 `(Tinysoft)` 匹配出来的结果。 2. `\` 本身是转义字符,所以要用 `\\d` 来表示 `\d` 元字符(匹配一个数字字符)。`\\d+` 表示匹配多个数字字符。 3. `.` 匹配任意单个字符(除 `\n`)。`.*` 匹配任意多个单个字符;由于 `.*` 没有中括号 `()`,匹配的字符不返回。 4. `(Tinysoft)` 匹配字符串 Tinysoft 并将其返回。注意,字符大小写敏感。 范例02:匹配数字、字符串、带括号的字符串 ```tsl source := "ParseRegExpr 2011 ShenZhenTinysoft (TSL)"; parseRegExpr("(\\d+).*(Tinysoft) (\\(\\w+\\))", source, "", result, m_pos, mlen); echo trim(toStn(result)); // 输出:array(("2011 ShenZhenTinysoft (TSL)","2011","Tinysoft","(TSL)")) ``` 说明:与范例01相比,新增了对 `()` 的匹配。输出中返回匹配的源串 "2011 ShenZhenTinysoft (TSL)" 以及匹配出来的串 "2011"、"Tinysoft" 和 "(TSL)"。 1. `\\(` 和 `\\)` 是对中括号 `()` 的匹配。 2. `\\w` 表示 `\w` 元字符,匹配包括下划线的任何单词字符。`\\w+` 表示匹配多个任意单词字符。 范例03:处理Unicode串-匹配汉字 ```tsl source := L"hello 你好!123"; // unicode串 reg := L"[一-龥]+"; // 匹配汉字的正则表达式->也是unicode串 ret := parseRegExpr(reg, source, "", result, m_pos, mlen); echo trim(toStn(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); echo trim(toStn(result)); // 输出:array(("hello tiny", "tiny")) ``` ## `parseRegExpr(reg_expr, parse_text, parse_ctrls, r_str, result)` 声明:function 按正则表达式匹配源字符串,并用指定内容替换匹配项。操作成功时将替换后的字符串写入 `result`。 | 参数 | 类型 | 说明 | | ------------- | ------ | ----------------------------------------- | | `reg_expr` | string | 正则表达式,基本兼容 Perl 5 的正则语法 | | `parse_text` | string | 要匹配和替换的源字符串 | | `parse_ctrls` | string | 正则控制串;执行替换时必须包含 `r` | | `r_str` | string | 替换内容,可使用 `$0` 到 `$99` 等匹配项宏 | | `result` | string | 出参,保存替换后的字符串 | 返回:bool|string。操作成功返回 1;失败时返回错误原因。 ### 示例 ```tsl source := "abc123def"; ok := parseRegExpr("123", source, "r", "X", result); echo ok, ":", result, "\n"; // 输出:1:abcXdef ``` ## `pos(substr, s)` 声明:function 子串位置,返回字符串Substr在字符串S中的位置,即S从第几个字母开始跟Substr的字符匹配,如果没有找到,就返回0。当参数类型不为字符串的时候不返回异常 | 参数 | 类型 | 说明 | | -------- | ------ | ---------------------------------- | | `substr` | string | 字符串类型,需要查找的字符串,子串 | | `s` | string | 字符串类型,源串 | 返回:integer ### 示例 范例01: ```tsl a := pos('a', 'thank you'); echo a; // 输出:3 ``` 范例02: ```tsl echo pos('fg', 'adcfgvbhj'); // 输出:4 ``` ## `replaceStr(a_text, a_from_text, a_to_text)` 声明:function 字符串的部分替换。将一个字符串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"; echo 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. ``` ## `replaceText(a_text, a_from_text, a_to_text)` 声明:function 字符串的部分替换。将一个字符串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"; echo replaceText(a_text, a_from_text, a_to_text); // 输出:The first one will be replaced by 'one', but the second one won't.n ``` ## `reversebString(s)` 声明:function 按字符顺序反转字符串,可处理非 MBCS 的原始字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | -------------- | | `s` | string | 要反转的字符串 | 返回:string ### 示例 ```tsl echo reversebString("abc"); // 输出:cba ``` ## `reverseString(s)` 声明:function 返回字符串S的反序 | 参数 | 类型 | 说明 | | ---- | ------ | ---------- | | `s` | string | 字符串类型 | 返回:string ### 示例 ```tsl echo reverseString('abcde1234'); // 返回字符串:4321edcba ``` ## `rightBStr(a_text, a_count)` 声明:function 返回Atext字符串从结束向右数ACount个字符组成的字符串。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------- | | `a_text` | string | 字符串,源串 | | `a_count` | integer | 整数,截取字符串的个数 | 返回:string ### 示例 ```tsl arr := rightBStr("i am a student", 4); echo arr; // 输出:dent ``` ## `rightStr(text, num_chars)` 声明:function 前N个字符;基于所指定的字符数返回文本字符串中的最后一个或后几个字符; | 参数 | 类型 | 说明 | | ----------- | ------- | -------- | | `text` | string | 字符串 | | `num_chars` | integer | 字符个数 | 返回:string ### 示例 ```tsl echo rightStr('abccccdddd', 2); // 输出:’dd’ ``` ## `sameFileName(s1, s2)` 声明:function 比较两个文件名是否相同,如果同名返回true,否则返回false。 | 参数 | 类型 | 说明 | | ---- | ------ | --------------------- | | `s1` | string | 字符串,比较的文件名1 | | `s2` | string | 字符串,比较的文件名2 | 返回:bool ### 示例 ```tsl echo sameFileName("index.tsl", "test.tsl"); // 输出:0 ``` ## `sameText(s1, s2)` 声明:function 返回字符串S1,S2是否相等 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------- | | `s1` | string | 字符串,比较字符串1 | | `s2` | string | 字符串,比较字符串2 | 返回:bool ### 示例 ```tsl echo sameText("SZ000001", "sz000001"); // 输出:1 // 输出:1 ``` ## `setChar(s, index, ch)` 声明:function 设置字符串/二进制流中相应位置的字符。Char为0-255之间的整数类型 | 参数 | 类型 | 说明 | | ------- | -------------- | ---------------- | | `s` | string\|binary | 字符串或二进制流 | | `index` | integer | 字符位置 | | `ch` | integer | 0-255 之间的整数 | 返回:integer ### 示例 ```tsl value := "abc"; result := setChar(value, 2, 90); echo trim(toStn(array("value": value, "result": result))); // 输出:array("value":"aZc","result":0) ``` ## `setFormatLocalCode(code)` 声明:function 设置Format等函数默认使用的地区区域码,每个区域都有默认的格式。-1为默认格式,0为当前系统所属地区码。 | 参数 | 类型 | 说明 | | ------ | ------- | ---- | | `code` | integer | 整型 | 返回:integer ### 示例 ```tsl setFormatLocalCode(0); echo getFormatLocalCode(); // 输出:0 ``` ## `setLength(s, new_length)` 声明:function 设置字符串或者Matrix或者二进制类型S的长度为NewLength | 参数 | 类型 | 说明 | | ------------ | ---------------------- | ------------------------------ | | `s` | string\|matrix\|binary | 字符串或者MATRIX或者二进制类型 | | `new_length` | integer | 整数,长度 | 返回:integer ### 示例 ```tsl // 相当于截取了源串S的前NewLength个字符 s := 'thankyou'; setLength(s, 5); echo s; // 输出字符串:thank ``` ## `setLikeFlag(flag)` 声明:function 设置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); // 大小写无关+使 '.' 特殊字符匹配任意字符 echo s like reg; // 输出:1 ``` ## `soundEx(a_text, alength)` 声明:function 返回一个字符串,这个字符串是用来表明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); echo trim(toStn(array(s1, s2, s3))); // 输出:array("S500","S500","T230") ``` ## `soundexCompare(a_text, a_other, a_length)` 声明:function 比较两个字符串的发音。根据AText和Aother转成发音码以后用AnsiCompareStr函数比较两个发音码。 | 参数 | 类型 | 说明 | | ---------- | ------- | --------------------------------------- | | `a_text` | string | 字符串,发音比较字符串1 | | `a_other` | string | 字符串,发音比较字符串2 | | `a_length` | integer | 判断长度,一般为4,该参数备用,暂时无效 | 返回:integer ### 示例 范例01: ```tsl echo soundexCompare("sun", "sum"); // 输出:0 ``` 范例02: ```tsl result := soundexCompare("sun", "fun"); echo result > 0; // 输出:1,表示第一个发音码大于第二个发音码 ``` 范例03: ```tsl echo soundexCompare("result", "return"); // 输出:-1 ``` ## `soundexInt(a_text, alength)` 声明:function 返回表示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); echo trim(toStn(array(s1, s2, s3))); // 输出:array(208597,208597,218929) ``` ## `soundexProc(a_text, a_other)` 声明:function 比较两个字符串的发音是否足够相似。根据AText和Aother转成发音码以后比较前面四个发音码。如果两个发音码相同,返回真,否则返回假 | 参数 | 类型 | 说明 | | --------- | ------ | ----------------------- | | `a_text` | string | 字符串,比较发音字符串1 | | `a_other` | string | 字符串,比较发音字符串1 | 返回:bool ### 示例 范例01: ```tsl echo soundexProc("sun", "sum"); // 输出:1 ``` 范例02: ```tsl echo soundexProc("sun", "fun"); // 输出:0 ``` 范例03: ```tsl echo soundexProc("transaction", "transact"); // 输出:1 ``` ## `soundexSimilar(a_text, a_other, a_length)` 声明:function 判断两个字符串Atext和AOther是否发音相似 | 参数 | 类型 | 说明 | | ---------- | ------- | --------------------------------------- | | `a_text` | string | 字符串,发音比较字符串1 | | `a_other` | string | 字符串,发音比较字符串2 | | `a_length` | integer | 判断长度,一般为4,备用参数,暂时无效。 | 返回:bool ### 示例 范例01: ```tsl echo soundexSimilar("sun", "sum"); // 输出:1 ``` 范例02: ```tsl echo soundexSimilar("sun", "fun"); // 输出:0 ``` 范例03: ```tsl echo soundexSimilar("return", "result"); // 输出:0 ``` ## `soundexWord(a_text)` 声明:function 把 SoundEx 发音特征字符串的前四个字符和长度编码为整数。 | 参数 | 类型 | 说明 | | -------- | ------ | ---------------------- | | `a_text` | string | SoundEx 发音特征字符串 | 返回:integer ### 示例 ```tsl echo soundexWord(soundEx("Tinysoft", 4)); // 输出:24206 ``` ## `startsStr(a_sub_text, a_text)` 声明:function 判别一个字符串ASubText是否是另一个字符串AText的开头。如果ASubText 是Atext的开头,就返回真,否则返回假。可以处理非MBCS的原始字符串。与StartsText函数不同,字符串的匹配是大小写敏感的。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl atext := 'abcdefg'; echo startsStr('abcd', atext); // 输出:1 ``` ## `startsText(a_sub_text, a_text)` 声明:function 判别一个字符串ASubText是否是另一个字符串AText的开头。如果ASubText 是Atext的开头,就返回真,否则返回假。可以处理非MBCS的原始字符串。 | 参数 | 类型 | 说明 | | ------------ | ------ | ---------------- | | `a_sub_text` | string | 字符串类型,子串 | | `a_text` | string | 字符串类型,源串 | 返回:bool ### 示例 ```tsl text := 'abcdefg'; echo startsText('Abc', text); // 输出:1 // 差异说明:对空字符串,Windows 判定为 1、Linux 为 0(如 startsText("", "A"));其它表现无差别。 ``` ## `str(x, s)` 声明:function 将一个实数X转换成字符串,存到参数S中 | 参数 | 类型 | 说明 | | ---- | ------ | -------------- | | `x` | real | 实数 | | `s` | string | 字符串,输出值 | 返回:integer ### 示例 ```tsl str(114, s); echo s; // 输出:1.14000000000000E+0002 ``` ## `str2Array(value, aps)` 声明:function 按分隔符把字符串拆成一维字符串数组。省略 `aps` 时使用分号。 | 参数 | 类型 | 说明 | | ------- | ------ | ------------------------ | | `value` | string | 要拆分的字符串 | | `aps` | string | 分隔符,省略时默认为分号 | 返回:array ### 示例 ```tsl echo trim(toStn(str2Array("alpha,beta,gamma", ","))); // 输出:array("alpha","beta","gamma") ``` ## `strCmp(s1, s2)` 声明:function 比较s1与s2的ascii码值的大小,若s1较大,则返回正数,若相等,则返回0,若s2较大,则返回负数。返回值的绝对值大小无实际意义。 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s1` | string | 字符串 | | `s2` | string | 字符串 | 返回:integer 差异说明 返回值的绝对值大小无实际意义,在不同操作系统中,其绝对值大小也表现不一。 比如,对比字符或ASCII码的比较,在Linux中,返回ASCII码相差的值,Windows中只返回-1,0,1等代表大小,但是符号是一致的。 如strcmp(#97, #100); // Windows返回-1,Linux中返回-3。 ### 示例 ```tsl a := strCmp("arr", "arry"); echo a; // // 输出:-1 ``` ## `strToBase64(s)` 声明:function 将字符串转换为BASE64编码并返回,该函数为本运行函数;可直接调用 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl echo strToBase64('a12'); // 输出:YTEy ``` ## `strToBool(s)` 声明:function 如果S为'0',返回假,如果是非0的数字串,则返回真 | 参数 | 类型 | 说明 | | ---- | ------ | ---------- | | `s` | string | 数字字符串 | 返回:bool ### 示例 ```tsl echo strToBool("1"); // 输出:1 ``` ## `strToBoolDef(s, default)` 声明:function 如果S为'0',返回假,如果是非0的数字串,则返回真,如果转换不成功,则返回Default指定的值 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------- | | `s` | string | 数字字符串 | | `default` | bool | 整数,默认返回值 | 返回:bool ### 示例 ```tsl echo strToBoolDef("12", 3); // 输出: 1 ``` ## `strToCurr(s)` 声明:function 将数字字符串S转换成实数返回,字符串中不允许有千分号,最大有效小数位为4位,超过四位小数的处理在不同的版本处理可能存在不一致的地方。 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:float ### 示例 ```tsl echo strToCurr("123.45"); // 输出:123.45 ``` ## `strToCurrDef(s, default)` 声明:function 将数字字符串S转换成实数返回,字符串中不允许有千分号。如果转换没有成功,则返回参数Default指定的默认值。小数位数与设置的系统参数相关,但是最大有效小数位为4位,超过四位小数的处理在不同的版本处理可能存在不一致的地方。 | 参数 | 类型 | 说明 | | --------- | -------- | ------------ | | `s` | string | 字符串 | | `default` | currency | 实数,默认值 | 返回:currency ### 示例 ```tsl echo strToCurrDef('1321.233', 3); // 输出:1321.233 ``` ## `strToFloat(s)` 声明:function 将数字字符串S转换成实数返回,字符串中不允许有千分号 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:float ### 示例 ```tsl echo strToFloat("123.45"); // 输出:123.45 ``` ## `strToFloatDef(s, default)` 声明:function 将数字字符串S转换成实数返回,字符串中不允许有千分号。如果转换没有成功,则返回参数Default指定的默认值 | 参数 | 类型 | 说明 | | --------- | ------ | ------------ | | `s` | string | 字符串 | | `default` | real | 实数,默认值 | 返回:real ### 示例 ```tsl echo strToFloatDef('a', 2); // 输出:2 ``` ## `strToInt(s)` 声明:function 将字符串转换为整数。 支持各种进制格式字符串的转换(如二进制、十六进制等)。若只转换十进制格式字符串,可使用函数FAQ:DecToInt | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串。需转换的字符串。 | 返回:int ### 示例 ```tsl echo strToInt("$FF"); // 输出:255 ``` ## `strToInt32(s)` 声明:function 将字符串转换为32位整数。 支持各种进制格式字符串的转换(如二进制、十六进制等)。若只转换十进制格式字符串,可使用函数FAQ:DecToInt32 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串。需转换的字符串。 | 返回:int ### 示例 ```tsl echo strToInt32("12345"); // 输出:12345 ``` ## `strToInt32Def(s, default)` 声明:function 将字符串转换为32位整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | integer | 整数。转换失败时返回的默认值 | 返回:integer ### 示例 范例01: ```tsl echo strToInt32Def("12", 1); // 输出: 12 ``` 范例02: ```tsl echo strToInt32Def("test", 1); // 输出: 1 ``` 范例03: ```tsl echo strToInt32Def("0x12", 1); // 输出:18 ``` ## `strToInt64(s)` 声明:function 将字符串转换为64位整数。 支持各种进制格式字符串的转换(如二进制、十六进制等)。若只转换十进制格式字符串,可使用函数FAQ:DecToInt64 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------------ | | `s` | string | 字符串。需转换的字符串。 | 返回:int64 ### 示例 ```tsl echo strToInt64("2147483648"); // 输出:2147483648 ``` ## `strToInt64Def(s, default)` 声明:function 将字符串转换为64位整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------ | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | int64 | 整数。转换失败时返回的默认值 | 返回:int64 ### 示例 范例01: ```tsl echo strToInt64Def("12", 1); // 输出: 12L ``` 范例02: ```tsl echo strToInt64Def("test", 1); // 输出: 1L ``` 范例03: ```tsl echo strToInt64Def("0x12", 1); // 输出:18L ``` ## `strToIntDef(s, default)` 声明:function 将字符串转换为整数。如果转换失败,则返回Default值。 | 参数 | 类型 | 说明 | | --------- | ------- | ---------------------------- | | `s` | string | 字符串。需转换的字符串 | | `default` | integer | 整数。转换失败时返回的默认值 | 返回:integer ### 示例 范例01: ```tsl echo strToIntDef("12", 1); // 输出: 12 ``` 范例02: ```tsl echo strToIntDef("test", 1); // 输出: 1 ``` 范例03: ```tsl echo strToIntDef("0x12", 1); // 输出:18 ``` ## `strw(x, s)` 声明:function 将一个实数X转换成科学记数法格式的宽字节字符串,存到参数S中 | 参数 | 类型 | 说明 | | ---- | ---------- | -------------- | | `x` | real | 实数 | | `s` | widestring | 字符串,输出值 | 返回:integer ### 示例 ```tsl v := strw(123.123, s); echo s; // 返回宽字节字符串:1.23123000000000E+0002 ``` ## `stuffbString(a_text, a_start, alength, a_sub_text)` 声明:function 字符串重组函数。将指定的字符串Atext的第AStart个字符开始以后的ALength个字符用AsubText字符串替换掉,得到一个新的字符串返回。可以处理非MBCS的原始字符串。一个汉字两个字节。 | 参数 | 类型 | 说明 | | ------------ | ------- | ----------------------------------------------------------------------- | | `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"; echo stuffbString(atext, 1, 4, a_sub_text); // 输出:HERE will be instead by 'HERE' ``` ## `stuffString(a_text, a_start, alength, a_sub_text)` 声明:function 字符串重组函数。将指定的字符串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"; echo stuffString(atext, 1, 4, a_sub_text); // 输出:HERE will be instead by ‘HERE’ ``` ## `sysEncodecryptStr(s, t)` 声明:function 对字符串进行加密。 | 参数 | 类型 | 说明 | | ---- | ------- | ------------------------ | | `s` | string | 字符串,需要被加密的源串 | | `t` | integer | 整数,选择加密类型 | 返回:string ### 示例 ```tsl s := "Server=127.0.0.1;Database=tsBase;Uid=TinySoft;Pwd=admin;"; encode_s := sysEncodecryptStr(s, 0); echo encode_s; // 返回字符串:_ENCODE_3A364432572518291B2C02321C2C0233084C2D59385A3B482D10641755344722194C25417C28412F56056A0C78431364003D5C38553C5269 ``` ## `trim(s)` 声明:function 去掉字符串首尾空格以及控制字符的字符串 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl echo trim(" Hello! \r\n Tinysoft "); // 输出: // "Hello! // Tinysoft" ``` ## `trimLeft(s)` 声明:function 去掉首空格以及控制字符的字符串 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl echo trimLeft("Hello! \r\n Tinysoft "); // 输出: // "Hello! // Tinysoft " ``` ## `trimRight(s)` 声明:function 去掉尾空格以及控制字符的字符串 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl echo trimRight("Hello! \r\n Tinysoft "); // 输出: // " Hello! // Tinysoft " ``` ## `tryStrToBool(s, value)` 声明:function 如果S为'0',则参数Value置为假,如果S是非0的数字串,则参数Value置为真。如果转换成功,函数返回真,否则返回假 | 参数 | 类型 | 说明 | | ------- | ------ | -------------- | | `s` | string | 数字字符串 | | `value` | bool | 布尔型,输出值 | 返回:bool ### 示例 ```tsl tryStrToBool("12", s); echo s; // 输出: 1 ``` ## `tryStrToCurr(s, value)` 声明:function 将数字字符串S转换成实数存到参数Value中,如果转换成功返回真,否则返回假。最大有效小数位为4位,超过四位小数的处理在不同的版本处理可能存在不一致的地方。 | 参数 | 类型 | 说明 | | ------- | -------- | ------ | | `s` | string | 字符串 | | `value` | currency | 实数 | 返回:bool ### 示例 ```tsl tryStrToCurr('1321.2333', s); echo s; // 输出:1321.2333 ``` ## `tryStrToFloat(s, value)` 声明:function 将数字字符串S转换成实数存到参数Value中,字符串中不允许有千分号。如果转换成功返回真,否则返回假。 | 参数 | 类型 | 说明 | | ------- | ------ | ---------------------------- | | `s` | string | 字符串,需要转换的数字字符串 | | `value` | real | 实数,输出值 | 返回:bool ### 示例 ```tsl tryStrToFloat('321.23', s); echo s; // 输出:321.23 ``` ## `tryStrToInt(s, value)` 声明:function 将字符串转换为32位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ------- | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | integer | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryStrToInt("12", value); if ret then echo value; else echo "转换失败!"; // 输出: 12 ``` 范例02:转换失败 ```tsl ret := tryStrToInt("test", value); if ret then echo value; else echo "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryStrToInt("0x12", value); if ret then echo value; else echo "转换失败!"; // 输出:18 ``` ## `tryStrToInt32(s, value)` 声明:function 将字符串转换为32位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ------------ | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | integer\|nil | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryStrToInt32("12", value); if ret then echo value; else echo "转换失败!"; // 输出: 12 ``` 范例02:转换失败 ```tsl ret := tryStrToInt32("test", value); if ret then echo value; else echo "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryStrToInt32("0x12", value); if ret then echo value; else echo "转换失败!"; // 输出:18 ``` ## `tryStrToInt64(s, value)` 声明:function 将字符串转换为64位整数。若转换成功,转换值通过Value输出。 | 参数 | 类型 | 说明 | | ------- | ---------- | ----------------------------------------------- | | `s` | string | 字符串。需转换的字符串 | | `value` | int64\|nil | 变参。转换成功,为转换后的整数;否则,为NIL值。 | 返回:bool ### 示例 范例01:转换成功 ```tsl ret := tryStrToInt64("12", value); if ret then echo value; else echo "转换失败!"; // 输出: 12L ``` 范例02:转换失败 ```tsl ret := tryStrToInt64("test", value); if ret then echo value; else echo "转换失败!"; // 输出: "转换失败!" ``` 范例03:十六进制格式字符串的转换 ```tsl ret := tryStrToInt64("0x12", value); if ret then echo value; else echo "转换失败!"; // 输出:18L ``` ## `unicodeEsc(s)` 声明:function 把一个字符串转换成为%uxxxx的Unicode编码串。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------ | | `s` | string | 字符串,Ansi字符串 | 返回:string ### 示例 ```tsl echo unicodeEsc('2011 tinysoft天软科技'); // 返回字符串:2011%20tinysoft%u5929%u8F6F%u79D1%u6280 ``` ## `unicodeEsc2(s)` 声明:function 把一个字符串转换成为\uxxxx的Unicode编码串。 | 参数 | 类型 | 说明 | | ---- | ------ | ------------------ | | `s` | string | 字符串,Ansi字符串 | 返回:string ### 示例 ```tsl echo unicodeEsc2('2011 tinysoft天软科技'); // 输出:2011 tinysoft\u5929\u8F6F\u79D1\u6280 ``` ## `unicodetomultibyte(s, cp)` 声明:function 把一个Unicode编码方式转换为ANSI编码。 | 参数 | 类型 | 说明 | | ---- | ------- | ---------------------------------- | | `s` | string | 字符串,Unicode字符串。 | | `cp` | integer | 整数,代码页。中文为936或者54936。 | 返回:string ### 示例 ```tsl unicode_text := multiByteToUnicode("ABC", 936); echo unicodeToMultiByte(unicode_text, 936); // 输出:ABC ``` ## `unicodetoUtf8(s)` 声明:function Unicode串转为UTF8串。天软字符串前加L表示宽字节字符串,即Unicode串。 | 参数 | 类型 | 说明 | | ---- | ------ | --------------------------- | | `s` | string | 字符串,Unicode编码字符串。 | 返回:string ### 示例 ```tsl echo unicodetoUtf8(L"ABC"); // 输出:ABC ``` ## `unicompress(_type, data[, compresslevel])` 声明:function 统一压缩函数,对字符串或二进制进行压缩。`_type` 目前支持 zstd、zlib、lz4 三种类型,压缩级别在 zstd 和 zlib 模式下生效。 | 参数 | 类型 | 说明 | | --------------- | ------------- | -------------------------------------------------- | | `_type` | string | 压缩类型,目前支持 zstd、zlib、lz4 三种类型。 | | `data` | string/binary | 字符串或二进制类型,被压缩的数据。 | | `compresslevel` | integer | 可选。压缩级别,目前仅在 zstd 和 zlib 模式下生效。 | 返回:string ### 示例 ```tsl data := "Tinysoft"; compressed := unicompress("zlib", data); echo length(compressed) > 0, "\n"; // 输出:1 ``` ## `uniuncompress(_type, data[, srclen])` 声明:function 统一解压函数。`_type` 目前支持 zstd、zlib、lz4 三种类型;`srclen` 表示原始数据大小,省略时自动识别,指定时会校验大小。 | 参数 | 类型 | 说明 | | -------- | ------------- | ------------------------------------------------------ | | `_type` | string | 解压类型,目前支持 zstd、zlib、lz4 三种类型。 | | `data` | string/binary | 字符串或二进制类型,被解压的数据。 | | `srclen` | integer | 可选。原始数据大小;省略时自动识别,指定时会校验大小。 | 返回:string ### 示例 ```tsl compressed := unicompress("zlib", "Tinysoft"); echo uniuncompress("zlib", compressed) = "Tinysoft", "\n"; // 输出:1 ``` ## `unUnicodeEsc(s)` 声明:function 把一个%uxxxx编码方式的Unicode编码串解码。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,Unicode编码字符串在Ansi编码中的显示字符 | 返回:string ### 示例 ```tsl echo unUnicodeEsc('2011%20tinysoft%u5929%u8F6F%u79D1%u6280'); // 输出:2011 tinysoft天软科技 ``` ## `unUnicodeEsc2(s)` 声明:function 解码 `\uxxxx` 形式的 Unicode 转义序列,返回多字节字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------- | | `s` | string | 包含 Unicode 转义序列的字符串 | 返回:string ### 示例 ```tsl echo unUnicodeEsc2("\\u0041"); // 输出:A ``` ## `unUnicodeEsc2W(s)` 声明:function 解码 `\uxxxx` 形式的 Unicode 转义序列,返回宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------- | | `s` | string | 包含 Unicode 转义序列的字符串 | 返回:string ### 示例 ```tsl echo string(unUnicodeEsc2W("\\u0041")); // 输出:A ``` ## `unUnicodeEsCw(s)` 声明:function 把一个%uxxxx编码方式的Unicode编码串解码,解码后是一个宽字节的字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,Unicode编码字符串在Ansi编码中的显示字符 | 返回:string ### 示例 ```tsl unicode_text := unUnicodeEsCw('2011%20tinysoft%u5929%u8F6F%u79D1%u6280'); echo ifwstring(unicode_text), ":", length(unicode_text); // 输出:1:17 ``` ## `upperCase(s)` 声明:function 将字符串S转换成大写并返回 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl echo upperCase("sz000001"); // 输出:SZ000001 ``` ## `utf8ToAnsi(s)` 声明:function UTF8串转为Ansi串。 | 参数 | 类型 | 说明 | | ---- | ------ | -------------------------------------------- | | `s` | string | 字符串,UTF8编码字符串在Ansi编码中的显示字符 | 返回:string ### 示例 ```tsl utf8_text := ansiToUtf8('2011 tinysoft天软科技'); ansi_text := utf8ToAnsi(utf8_text); echo ansi_text = '2011 tinysoft天软科技'; // 输出:1 ``` ## `utf8ToUnicode(s)` 声明:function UTF8串转为Unicode串。Unicode串为宽字节字符串。 | 参数 | 类型 | 说明 | | ---- | ------ | ----------------------------------------------- | | `s` | string | 字符串,UTF8编码字符串在Unicode编码中的显示字符 | 返回:string ### 示例 ```tsl utf8_text := ansiToUtf8('2011 tinysoft天软科技'); unicode_text := utf8ToUnicode(utf8_text); echo ifwstring(unicode_text), ":", length(unicode_text); // 输出:1:17 ``` ## `val(s, v, code)` 声明:function 将一个字符串S转换成实数V,如果成功,则Code置0,否则Code表示转换不成功的字符的位置 | 参数 | 类型 | 说明 | | ------ | ------- | ------------ | | `s` | string | 字符串 | | `v` | real | 实数,输出值 | | `code` | integer | 整数,输出值 | 返回:any ### 示例 范例一: ```tsl val("1.1424E+0002", v, code); echo v; // 输出:114.24 ``` 范例二: ```tsl // 返回错误信息:在转换到第6位字符时不成功。 val("1.142aE+0002", v, code); echo trim(toStn(array(v, code))); // 输出:array(1.142,6) ``` ## `wideChr(value)` 声明:function 返回unicode码的值为value的unicode字符 | 参数 | 类型 | 说明 | | ------- | ------- | ---- | | `value` | integer | 整数 | 返回:widestring ### 示例 ```tsl a_value := wideChr(25105); echo ifwstring(a_value), ":", length(a_value); // 输出:1:1 ``` ## `wrapText(line, max_col)` 声明:function 按照最大行长为MaxCol自动分行。 | 参数 | 类型 | 说明 | | --------- | ------- | ------------------ | | `line` | string | 待自动分行的字符串 | | `max_col` | integer | 整型,每行最长字符 | 返回:string ### 示例 ```tsl const_line := "Separate this sentence to two lines."; echo wrapText(const_line, 20); // 自动换行时考虑字词的完整性。 // 输出: // Separate this // sentence to two // lines. ```