# 基础函数 / 字符串 ## `toHttpPostdata(v, data_mode)` 声明:function 根据数据模式转换为字符串格式 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------------------ | | `v` | any | 待转换的数据 | | `data_mode` | string | 数据模式,支持 `json` 和 `tslstream` | 返回:string ### 示例 ```tsl value := array("Type": 1, "IDs": array("SZ000001"), "SUBs": array("date_s", "price")); echo toHttpPostdata(value, "json"); // 输出:{"Type":1,"IDs":["SZ000001"],"SUBs":["date_s","price"]} ``` ## `dateStrToArr(end_dates, sep1, sep2)` 声明:function 把日期区间字符串转换为列表 | 参数 | 类型 | 说明 | | ----------- | ------ | -------------------- | | `end_dates` | string | 日期区间字符串 | | `sep1` | string | 日期区间字符串分割符 | | `sep2` | string | 开始和截止日期分割符 | 返回:array ### 示例 ```tsl return dateStrToArr('2007-9-10;2007-9-10', '$', ';'); // 输出:'$'表示结束位置 ``` ## `floatToStrne(value)` 声明:function 将实数转换成字符串类型。和FloatToStr的区别:在处理浮点数据时,FloatToStrne的结果不会输出为1E15等格式 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 范例01:转换普通浮点数 ```tsl return floatToStrne(23.4); // 输出:"23.4" ``` 范例02:转换大数量级浮点数 ```tsl return floatToStrne(1E15); // 输出:"1000000000000000" ``` ## `floatToStrneW(value)` 声明:function 将实数转换成宽字节字符串类型。和FloatToStrW的区别:在处理大数量级数据(如1E15、10^15等)时,FloatToStrneW的结果不会输出为1E15等格式 | 参数 | 类型 | 说明 | | ------- | ---- | ---- | | `value` | real | 实数 | 返回:string ### 示例 范例01:转换普通浮点数 ```tsl return floatToStrneW(1234.1234); // 输出:L"1234.1234" ``` 范例02:转换大数量级浮点数 ```tsl return floatToStrneW(1E15); // 输出:L"1000000000000000" ``` ## `formatStrExt(s)` 声明:function 判断字符串是否是字符串,不是字符串的显示为"-" | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 范例01:输入字符串 ```tsl return formatStrExt('aaaaa'); // 输出:aaaaa ``` 范例02:输入不是字符串时返回占位符 ```tsl return formatStrExt(123); // 输出:- ``` ## `fuzzyCompare(_type, s1, s2)` 声明:function 根据指定算法,计算两字符串的相似性 | 参数 | 类型 | 说明 | | ------- | ------- | ------------------------------------ | | `_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)` 声明:function 根据指定算法,计算两字符串的相似性 | 参数 | 类型 | 说明 | | ------- | ------- | ---------------------------------------------------------------------------------- | | `_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) ``` ## `fzCosine()` 声明:function Cosine(余弦相似度)算法类型:将字符串根据指定长度n(默认值为2)划分为两个字符集合,将字符集合转换为向量,计算两向量夹角的余弦值 返回:integer ### 示例 范例一: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 ``` ## `fzEditDistance()` 声明:function 基于编辑距离(Edit Distance)的模糊匹配算法,核心是计算将一个字符串转换为另一个字符串所需的最小编辑操作次数,允许的操作包含插入、删除、替换三类 返回:integer ### 示例 范例一: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()` 声明:function Hamming Distance(汉明距离)算法类型:计算两字符串对应位置上不同字符的数量 返回:integer ### 示例 范例一: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) ``` ## `fzJaccard()` 声明:function Jaccard相似度算法类型:将字符串根据指定长度n(默认值为2)划分为两个字符集合,计算两集合交集元素个数与并集元素个数的比值 返回:integer ### 示例 范例一: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) ``` ## `fzJaroWinkler()` 声明:function Jaro-Winkler距离算法类型:先统计两字符串的匹配字符数与换位次数,并代入Jaro距离算法公式,得到相似度,再根据两字符串的公共前缀长度给予额外加权,得到最终的相似度 返回:integer ### 示例 范例一:FuzzyCompare相似性计算 ```tsl return fuzzyCompare(fzJaroWinkler(), "kitten", "sitting"); // 输出:0.746031746031746 ``` 范例二:FuzzyCompareEx相似性计算 ```tsl return fuzzyCompareEx(fzJaroWinkler(), "kitten", "sitting", n, nret); // 输出:0.746031746031746 ``` ## `fzLongestSequnce()` 声明:function Longest Sequnce(最长公共子序列)算法类型:找出两字符串中顺序相同但不必连续的最长子序列 返回:integer ### 示例 范例一: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) ``` ## `fzLongestSubstring()` 声明:function Longest Substring(最长公共子串)算法类型:找出两字符串中连续出现的最长相同子串 返回:integer ### 示例 范例一: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) ``` ## `fzSimHash()` 声明:function SimHash(局部敏感哈希)算法类型:对字符串分词并计算加权哈希生成二进制指纹,比较两个指纹间的对应位置上不同字符的数量 返回:integer ### 示例 范例一: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) ``` ## `getPyStringList()` 声明:function 获取汉字拼音首字母对照表 返回:tslobj ### 示例 ```tsl sl := getPyStringList(); return sl.values("明"); // 输出:M ``` ## `hztoPy(hz)` 声明:function 汉字翻译为拼音 | 参数 | 类型 | 说明 | | ---- | ------ | ----------- | | `hz` | string | String 汉字 | 返回:string ### 示例 范例01:转换第一个词组 ```tsl return hztoPy("华夏优势"); // 输出:HXYS ``` 范例02:转换多音字词组 ```tsl return hztoPy("华夏盛势"); // 输出:HXCS HXSS ``` ## `letters(vlaue, ul)` 声明:function 将数字与在字符串进行对照转换。基本用法同R的letters。在超出26的时候,仿excel的列名的规则提取。用于将excel数字列名转为字符串列名:1->'A' | 参数 | 类型 | 说明 | | ------- | ------- | ----------------------- | | `vlaue` | integer | 整数。正整数列名 | | `ul` | integer | 整数。是否大写,默认为1 | 返回:string/array ### 示例 ```tsl return letters(1, 0); // 输出:a ``` ## `parseRegExpr3(s, reg_from_text, to_text, parse_ctrls)` 声明:function 直接返回输出的正则表达式解析 | 参数 | 类型 | 说明 | | --------------- | ------ | -------------------------------- | | `s` | string | 字符串。源串 | | `reg_from_text` | string | 字符串。待替换的部分,正则表达式 | | `to_text` | string | 字符串。替换的字符串 | | `parse_ctrls` | string | 字符串。正则表达式控制串 | 返回:string ### 示例 ```tsl return parseRegExpr3("abcdeak", "ab", "kkkk", "ir"); // 输出:kkkkcdeak ``` ## `rDateStrToArr(rdate_list)` 声明:function 把报告期字符串转换为列表 | 参数 | 类型 | 说明 | | ------------ | ------ | ------------------------------------------ | | `rdate_list` | string | 字符串,报告期字符串,多个报告期以分号区分 | 返回:array ### 示例 ```tsl return rDateStrToArr('20070331;20070630'); ``` ## `replaceStrByReg(s, reg_from_text, to_text)` 声明:function 正则表达式快速字符串替换,大小写敏感 | 参数 | 类型 | 说明 | | --------------- | ------ | -------------------------------- | | `s` | string | 字符串。源串 | | `reg_from_text` | string | 字符串。待替换的部分,正则表达式 | | `to_text` | string | 字符串。替换的字符串 | 返回:string ### 示例 ```tsl return replaceStrByReg("abcdeak", "A", "kkkk"); // 输出:abcdeak ``` ## `replaceTextByReg(s, reg_from_text, to_text)` 声明:function 正则表达式快速字符串替换,大小写不敏感 | 参数 | 类型 | 说明 | | --------------- | ------ | -------------------------------- | | `s` | string | 字符串。源串 | | `reg_from_text` | string | 字符串。待替换的部分,正则表达式 | | `to_text` | string | 字符串。替换的字符串 | 返回:string ### 示例 ```tsl return replaceTextByReg("abcdeak", "a", "kkkk"); // 输出:kkkkbcdekkkkk ``` ## `seprateStrToTotal(s)` 声明:function 把用;分割的字符串转换为#分割 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return seprateStrToTotal('债券型;现金型;配置型;股票型;保本型'); // 输出:债券型#现金型#配置型#股票型#保本型 ``` ## `spaceByNumber(n)` 声明:function 生成N个空格字符串 | 参数 | 类型 | 说明 | | ---- | ------- | ---- | | `n` | integer | 整数 | 返回:string ### 示例 ```tsl return write('---', spaceByNumber(2), '---'); // 运行信息打印结果: ``` ## `tostring(v)` 声明:function 将数值转成字符串类型 | 参数 | 类型 | 说明 | | ---- | ------ | ---- | | `v` | number | 数值 | 返回:string ### 示例 ```tsl echo tostring(123.45); ``` ## `totalStrToSeprate(s)` 声明:function 把用#分割的字符串转换为;分割 | 参数 | 类型 | 说明 | | ---- | ------ | ------ | | `s` | string | 字符串 | 返回:string ### 示例 ```tsl return totalStrToSeprate ('债券型#现金型#配置型#股票型#保本型'); // 输出:债券型;现金型;配置型;股票型;保本型 ``` ## `tryLowercase(s)` 声明:function 将字符串S转换成小写并返回,不抛出异常,转换失败时返回"" | 参数 | 类型 | 说明 | | ---- | ------ | --------------- | | `s` | string | 字符串,原字符串 | 返回:string ### 示例 ```tsl return tryUppercase("ABC"); // 输出:"abc" ``` ## `tryUppercase(s)` 声明:function 将字符串S转换成大写并返回,不抛出异常,转换失败时返回"" | 参数 | 类型 | 说明 | | ---- | ------ | --------------- | | `s` | string | 字符串,原字符串 | 返回:string ### 示例 ```tsl return tryUppercase("abc"); // 输出:"ABC" ```