# 基础函数 / 字符串

## `toHttpPostdata(v, data_mode)`

声明：function

根据数据模式转换为字符串格式

<!-- tags: 转换 编码 -->

| 参数        | 类型   | 说明                                 |
| ----------- | ------ | ------------------------------------ |
| `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

把日期区间字符串转换为列表

<!-- tags: 转换 编码 -->

| 参数        | 类型   | 说明                 |
| ----------- | ------ | -------------------- |
| `end_dates` | string | 日期区间字符串       |
| `sep1`      | string | 日期区间字符串分割符 |
| `sep2`      | string | 开始和截止日期分割符 |

返回：array

### 示例

```tsl
return dateStrToArr('2007-9-10;2007-9-10', '$', ';'); // 输出：'$'表示结束位置
```

## `floatToStrne(value)`

声明：function

将实数转换成字符串类型。和FloatToStr的区别：在处理浮点数据时，FloatToStrne的结果不会输出为1E15等格式

<!-- tags: 转换 编码 -->

| 参数    | 类型 | 说明 |
| ------- | ---- | ---- |
| `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等格式

<!-- tags: 转换 编码 -->

| 参数    | 类型 | 说明 |
| ------- | ---- | ---- |
| `value` | real | 实数 |

返回：string

### 示例

范例01：转换普通浮点数

```tsl
return floatToStrneW(1234.1234);
// 输出：L"1234.1234"
```

范例02：转换大数量级浮点数

```tsl
return floatToStrneW(1E15);
// 输出：L"1000000000000000"
```

## `formatStrExt(s)`

声明：function

判断字符串是否是字符串，不是字符串的显示为"-"

<!-- tags: 判断 检查 -->

| 参数 | 类型   | 说明   |
| ---- | ------ | ------ |
| `s`  | string | 字符串 |

返回：string

### 示例

范例01：输入字符串

```tsl
return formatStrExt('aaaaa');
// 输出：aaaaa
```

范例02：输入不是字符串时返回占位符

```tsl
return formatStrExt(123);
// 输出：-
```

## `fuzzyCompare(_type, s1, s2)`

声明：function

根据指定算法，计算两字符串的相似性

<!-- tags: 计算 求解 -->

| 参数    | 类型    | 说明                                 |
| ------- | ------- | ------------------------------------ |
| `_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

根据指定算法，计算两字符串的相似性

<!-- tags: 计算 求解 -->

| 参数    | 类型    | 说明                                                                               |
| ------- | ------- | ---------------------------------------------------------------------------------- |
| `_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

获取汉字拼音首字母对照表

<!-- tags: 获取 查询 -->

返回：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'

<!-- tags: 转换 编码 -->

| 参数    | 类型    | 说明                    |
| ------- | ------- | ----------------------- |
| `vlaue` | integer | 整数。正整数列名        |
| `ul`    | integer | 整数。是否大写，默认为1 |

返回：string/array

### 示例

```tsl
return letters(1, 0);
// 输出：a
```

## `parseRegExpr3(s, reg_from_text, to_text, parse_ctrls)`

声明：function

直接返回输出的正则表达式解析

<!-- tags: 解析 parse -->

| 参数            | 类型   | 说明                             |
| --------------- | ------ | -------------------------------- |
| `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

把报告期字符串转换为列表

<!-- tags: 转换 编码 -->

| 参数         | 类型   | 说明                                       |
| ------------ | ------ | ------------------------------------------ |
| `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

把用;分割的字符串转换为#分割

<!-- tags: 转换 编码 -->

| 参数 | 类型   | 说明   |
| ---- | ------ | ------ |
| `s`  | string | 字符串 |

返回：string

### 示例

```tsl
return seprateStrToTotal('债券型;现金型;配置型;股票型;保本型');
// 输出：债券型#现金型#配置型#股票型#保本型
```

## `spaceByNumber(n)`

声明：function

生成N个空格字符串

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `n`  | integer | 整数 |

返回：string

### 示例

```tsl
return write('---', spaceByNumber(2), '---');
// 运行信息打印结果：
```

## `tostring(v)`

声明：function

将数值转成字符串类型

<!-- tags: 转换 编码 -->

| 参数 | 类型   | 说明 |
| ---- | ------ | ---- |
| `v`  | number | 数值 |

返回：string

### 示例

```tsl
echo tostring(123.45);
```

## `totalStrToSeprate(s)`

声明：function

把用#分割的字符串转换为;分割

<!-- tags: 转换 编码 -->

| 参数 | 类型   | 说明   |
| ---- | ------ | ------ |
| `s`  | string | 字符串 |

返回：string

### 示例

```tsl
return totalStrToSeprate ('债券型#现金型#配置型#股票型#保本型');
// 输出：债券型;现金型;配置型;股票型;保本型
```

## `tryLowercase(s)`

声明：function

将字符串S转换成小写并返回，不抛出异常，转换失败时返回""

<!-- tags: 转换 编码 -->

| 参数 | 类型   | 说明            |
| ---- | ------ | --------------- |
| `s`  | string | 字符串,原字符串 |

返回：string

### 示例

```tsl
return tryUppercase("ABC");
// 输出："abc"
```

## `tryUppercase(s)`

声明：function

将字符串S转换成大写并返回，不抛出异常，转换失败时返回""

<!-- tags: 转换 编码 -->

| 参数 | 类型   | 说明            |
| ---- | ------ | --------------- |
| `s`  | string | 字符串,原字符串 |

返回：string

### 示例

```tsl
return tryUppercase("abc");
// 输出："ABC"
```
