#### 基础函数

##### 内容

- 数字
- 日期时间
- 字符串
- 数组

##### 数字

###### 内容

- FloatN
- FloatToStrEx
- FormatFloatExt
- WebZero
- RoundTo5
- SimpleRoundTo2
- DivValue
- Dataisequal

###### FloatN

用途：将浮点数按指定小数位数四舍五入。
参数：value 为输入数值；digits 为保留的小数位数。
返回：数值。

范例

```tsl
return FloatN(12.6578, 2);
// 结果：12.66
```

###### FloatToStrEx

用途：将浮点数格式化为字符串，保留指定小数位数。
参数：value 为输入数值；digits 为保留的小数位数。
返回：字符串。

范例

```tsl
return FloatToStrEx(12.6578, 2);
// 结果：’ 12.66’
```

###### FormatFloatExt

用途：按扩展格式输出数值字符串，支持千分位与空值处理。
参数：value 为输入数值；format 为格式参数（可选）。
返回：字符串。

范例

```tsl
return FormatFloatExt(12345.67, 1);
// 结果：’ 12,345.67’

return FormatFloatExt("123");
// 结果：’ -’
```

###### WebZero

用途：当数值为 0 时返回空字符串，否则返回数值字符串。
参数：value 为输入数值。
返回：字符串。

范例

```tsl
return WebZero(0);
// 结果：’’  // 空字串
```

###### RoundTo5

用途：将数值按 0.5 的步长进行四舍五入。
参数：value 为输入数值。
返回：数值。

范例

```tsl
return RoundTo5(0.35);
// 结果：0.5
```

###### SimpleRoundTo2

用途：按指定小数位数进行四舍五入（对负数同样生效）。
参数：value 为输入数值；digits 为保留的小数位数。
返回：数值。

范例

范例01：

```tsl
return SimpleRoundTo2(1234.56789654, -2);
// 结果：1234.57
```

范例02：

```tsl
return SimpleRoundTo2(-1234.5658965, -2);
// 结果：-1234.56
```

###### DivValue

用途：当除数不为 0 时返回 v1 / v2，否则返回 0。
参数：v1 为被除数；v2 为除数。
返回：数值。

算法如果v2不为0，则返回v1/v2，否则返回0。范例

```tsl
return DivValue(8, 2);
// 返回：4
```

###### Dataisequal

用途：判断两个数据是否相等。
参数：a 与 b 为待比较的数据。
返回：布尔值。

##### 日期时间

###### 内容

- ISO8601
- GMT时间
- 常用日期时间函数
- 简单转换函数
- 普通日期函数
- 分解函数
- 起始结束函数
- 关系函数
- 范围判定函数
- 范围获得函数
- 范围生成函数
- 时间推移函数
- 组合、分解日期函数
- 日期重组函数
- 日期格式的转换
- 宽字节日期格式转换函数

###### ISO8601

标有ISO8601标准的函数的含义包括以下几点：

1、对于某一周属于某年（或某月）的认定标准是是否有四天以上属于某年（或某月）。例如，对于某年第一周的认定是此年的第一个星期四所在的周。这保证了这个周至少有4天在这个年份中。

这同时意味着一年总的周数必然是52或53。

2、一周的开始是星期一，结束是星期天。分别用1到7的数字表示。

###### GMT时间

GMT时间就是英国格林威治时间，也就是世界标准时间，是本初子午线上的地方时，是0时区的区时，与我国的标准时间北京时间（东八区）相差8小时，即晚8小时。

当GMT时间为00:00:00时，北京时间为8:00:00。

###### 常用日期时间函数

####### 内容

- Time
- DecodeTime
- DayOfWeek
- EncodeTime
- Now
- DecodeDate
- Date
- TryEncodeDate
- TryEncodeTime
- DecodeDateFully
- EncodeDate
- TryStrToDate
- StrToDateTimeDef
- DateTimeToInternetStr
- IncAMonth
- StrToTime
- CurrentYear
- TryStrToTime
- StrToDate
- DateTimeGMTToHttpStr
- DateToStr
- StrToTimeDef
- DateTimeToStr
- DateTimeToString
- Strtodatetime2
- FormatDateTime
- DateTimeGMTToCookieStr
- StrToDateTime
- IsLeapYear
- GMTToLocalDateTime
- TimeToStr
- StrToDateDef
- TryStrToDateTime

####### Time

用途：日期时间处理函数。
参数：无。
返回：日期或时间值。

范例

```tsl
return Time(); // 输出0.59
```

参考TDateTime

####### DecodeTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
DecodeTime(strtoTime("13:33:45.500"), hour, min, sec, msec);
return array(hour, min, sec, msec);
// 返回 array(13,33,45,500)
```

参考TDateTime EncodeDate EncodeTime TryEncodeDate TryEncodeTime DecodeDateFully
DecodeDate

####### DayOfWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
dow := DayOfWeek(EncodeDate(2011, 8, 8));
return dow; // 输出：2
```

参考TDateTime

####### EncodeTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
Time1 := EncodeTime(12, 35, 35, 100);
return time1; // 输出：0.52471(12:35:35.1)
```

参考TDateTime EncodeDate TryEncodeDate TryEncodeTime DecodeTime DecodeDate
DecodeDateFully

####### Now

用途：日期时间相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return Now(); // 输出40763.59
```

参考TDateTime

####### DecodeDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
DecodeDate(inttodate(20140115), year, month, day);
return array(year, month, day );
// 输出array(2014,1,15)
```

参考TDateTime EncodeDate DecodeTime DecodeDateFully EncodeTime TryEncodeDate
TryEncodeTime

####### Date

用途：日期时间处理函数。
参数：无。
返回：日期或时间值。

范例

```tsl
// 当前的日期
return Date(); // 输出41656
```

参考TDateTime

####### TryEncodeDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
if TryEncodeDate(2011, 12, 25, date) then return date; // 输出：40902
else return "encode error";
// 输出 encode error

if TryEncodeDate(2011, 12, 32, date) then return date
else return "encode error";
// 输出 encode error
```

参考TDateTime EncodeDate TryEncodeTime DecodeTime DecodeDate DecodeDateFully
EncodeTime

####### TryEncodeTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
if TryEncodeTime(12, 20, 30, 200, time) then return time//输出:0.51
else return "eccode error ";
```

参考TDateTime EncodeDate DecodeTime DecodeDate DecodeDateFully EncodeTime
TryEncodeDate

####### DecodeDateFully

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
Flag := DecodeDateFully(inttodate(20140115), year, month, day, dow);
fname := ifthen(1, '闰年', '平年');
return array(year, month, day, dow, fname);
// 返回：array(2014,1,15,4,'闰年')
```

参考TDateTime EncodeDate DecodeTime EncodeTime TryEncodeDate TryEncodeTime
DecodeDate

####### EncodeDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
date := EncodeDate(2011, 8, 6);
return date; // 输出：40761
```

参考TDateTime EncodeTime TryEncodeDate TryEncodeTime DecodeDate DecodeDateFully
DecodeTime

####### TryStrToDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
if TryStrToDate("2010-02-04 ", date) then return date; // 输出40213
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### StrToDateTimeDef

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToDateTimeDef("2011-08-08 16:61:16 ", now()); // 输出当前系统日期时间
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### DateTimeToInternetStr

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
EndT := strtodatetime('2014-01-01 10:00:00');
datetime := DateTimeToInternetStr(EndT, 0);
return datetime; // 输出Wed, 1 Jan 2014 10:00:00 +0800
```

####### IncAMonth

范例

```tsl
year := 2011;
month := 8;
day := 8;
IncAmonth(year, month, day, 4);
return EncodeDate(year, month, day); // 输出40885
```

####### StrToTime

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToTime("15:20:34"); // 输出0.64
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### CurrentYear

用途：日期时间相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return CurrentYear(); // 输出2011
```

####### TryStrToTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
if TryStrToTime("15:52:35", time) then return time; // 输出0.66
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### StrToDate

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToDate("2010-02-04"); // 输出40213
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### DateTimeGMTToHttpStr

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
EndT := strtodatetime('2014-01-01 10:00:00');
datetime := DateTimeGMTToHttpStr(EndT);
return datetime; // 输出：Wed, 01 Jan 2014 10:00:00 GMT
```

####### DateToStr

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
EndT := inttodate(20140117);
return DateToStr(EndT); // 输出 2014-01-17
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### StrToTimeDef

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
time := StrToTimeDef("15:61:34 ", time());
return time; // 输出当前系统时间
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### DateTimeToStr

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
EndT := now();
return DateTimeToStr(EndT); // 输出当前系统日期时间
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### DateTimeToString

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
DateTimeToString(result, 'YYYY-MM-DD HH:NN:SS', now());
return result; // 输出当期系统日期时间
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

差异说明在不同操作系统中，返回的日期格式会有所差异，差异同FormaTDateTime，FAQ：FormatDateTime

####### Strtodatetime2

范例

```tsl
// 字符串2021-8-12 10:31:24:199 转换为日期时间格式(包含毫秒)
s := "2021-8-12 10:31:24:199"
return StrToDateTime2(s); // 结果：44420.4384745255
```

####### FormatDateTime

用途：按指定格式输出结果。
参数：

返回：日期或时间值。

范例

```tsl
return FormatDateTime("C", now()); // 输出2011-08-08 16:27:08
return FormatDateTime("Dddddd", now()); // 输出2011年8月8日
```

参考SetFormatLocalCode GetFormatLocalCode

差异说明其转换结果依赖运行环境的操作系统的日期时间格式，如表示星期时，有些操作系统上表示方式为“周五”，而有些操作系统上表示为“五”。

####### DateTimeGMTToCookieStr

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
EndT := strtodatetime('2014-01-01 10:00:00');
datetime := DateTimeGMTToCookieStr(EndT);
return datetime; // 输出Wed, 01-Jan-2014 10:00:00 GMT
```

####### StrToDateTime

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToDateTime("2011-08-08 16:00:16 "); // 输出40763.67
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### IsLeapYear

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
return IsLeapYear(2000); // 输出1
return IsLeapYear(2011); // 输出0
```

参考IsInLeapYear

####### GMTToLocalDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
GMT := "Wed, 01 Jan 2014 10:00:00 GMT ";
datetime := GMTToLocalDateTime(GMT);
return datetime; // 输出：41640.75 （时间为2014-01-01 18:00:00）
```

####### TimeToStr

范例

```tsl
// 输入时间或者日期时间
return timeToStr(0.5);
return timetostr(now());
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### StrToDateDef

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToDateDef("2010-02-30", date()); // 转换失败输出当前日期40763
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

####### TryStrToDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
if TryStrToDateTime("2010-02-04 16:11:35 ", datetime) then return datetime; // 输出40213.67
```

参考TDateTime SetFormatLocalCode GetFormatLocalCode

###### 简单转换函数

####### 内容

- DateToInt
- IntToDate
- StrToDateExt
- ExcelIntToDate
- ExcelDateToInt
- FormatStrToDateTime2

####### DateToInt

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
DateTime := 40559;
return DateToInt(DateTime);
// 结果：20110116
```

####### IntToDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
Rdate := 20110116;
return IntToDate(Rdate);
// 结果: 40559
```

####### StrToDateExt

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
S := '16/1/2011';
StrFormat := 0;
return StrToDateExt(S, StrFormat);
// 结果：40559
```

####### ExcelIntToDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
// 报告期为2010年年报
RDate := 20101231;
return ExcelIntToDate(RDate);
// 结果：40543
```

####### ExcelDateToInt

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
RDate := 20101231;
return ExcelDateToInt(RDate);
// 结果：20101231
```

####### FormatStrToDateTime2

用途：按指定格式输出结果。
参数：

返回：日期或时间值。

范例

```tsl
// 字符串2021-8-12 10:31:24:199 转换为日期时间格式(包含毫秒)
s := "2021.01.04T23:00:00.000";
FormatStr := "yyyy.mm.ddThh:nn:ss.zzz";
return FormatStrToDateTime2(S, FormatStr); // 结果：44200.9583333333
```

###### 普通日期函数

####### 内容

- IsInLeapYear
- IsPM
- IsValidDate
- IsValidTime
- IsValidDateTime
- IsValidDateDay
- IsValidDateWeek
- IsValidDateMonthWeek
- WeeksInYear
- WeeksInAYear
- DaysInYear
- DaysInAYear
- DaysInMonth
- DaysInAMonth
- Today
- Yesterday
- Tomorrow
- IsToday
- IsSameDay

####### IsInLeapYear

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsInLeapYear(date) then return "this year is a leap year "
else return "this year is not a leap year ";
```

参考TDateTime IsLeapYear

####### IsPM

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsPM(Time()) then return "is PM "
else return "is AM ";
```

参考TDateTime

####### IsValidDate

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsValidDate(2011, 8, 34) then return "right "
else return "wrong ";
// 输出 wrong
```

参考IsValidTime IsValidDateTime IsValidDateDay IsValidDateWeek
IsValidDateMonthWeek

####### IsValidTime

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsValidTime(17, 48, 45, 678) then return "right time "
else return "wrong time "; // 输出 right time
```

参考IsValidDate IsValidDateTime IsValidDateDay IsValidDateWeek
IsValidDateMonthWeek

####### IsValidDateTime

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsValidDateTime(2011, 8, 8, 17, 57, 56, 245) then return "right "
else return "wrong ";
// 输出 right
```

参考IsValidDate IsValidTime IsValidDateDay IsValidDateWeek IsValidDateMonthWeek

####### IsValidDateDay

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsValidDateDay(2010, 345) then return "valid "
else return "not valid ";
// 输出 valid
```

参考IsValidDate IsValidTime IsValidDateTime IsValidDateWeek IsValidDateMonthWeek

####### IsValidDateWeek

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsValidDateWeek (2010, 15, 4) then return "valid "
else return "not valid ";
// 输出 valid
```

参考IsValidDate IsValidTime IsValidDateTime IsValidDateDay IsValidDateMonthWeek

####### IsValidDateMonthWeek

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
if IsValidDateMonthWeek(2000, 10, 2, 3) then return "valid "
else return "not valid ";
```

输出 valid参考IsValidDate IsValidTime IsValidDateTime IsValidDateDay
IsValidDateWeek

####### WeeksInYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
num := WeeksInYear (Date());
return num; // 输出52
```

参考TDateTime WeeksInAYear DaysInYear DaysInAYear DaysInMonth DaysInAMonth

####### WeeksInAYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
num := WeeksInAYear (2010);
return num; // 输出52
```

参考WeeksInYear DaysInYear DaysInAYear DaysInMonth DaysInAMonth

####### DaysInYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
days := DaysInYear (Date());
return days; // 输出365
```

参考TDateTime WeeksInYear WeeksInAYear DaysInAYear DaysInMonth DaysInAMonth

####### DaysInAYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
days := DaysInAYear (2010);
return days; // 输出365
```

参考WeeksInYear WeeksInAYear DaysInYear DaysInMonth DaysInAMonth

####### DaysInMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
days := DaysInMonth (inttodate(20131201));
return days; // 输出31
```

参考TDateTime WeeksInYear WeeksInAYear DaysInYear DaysInAYear DaysInAMonth

####### DaysInAMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
days := DaysInAMonth (2010, 2);
return days; // 输出28
```

参考WeeksInYear WeeksInAYear DaysInYear DaysInAYear DaysInMonth

####### Today

用途：日期时间相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
datetime := Today();
return DateToStr(datetime); // 输出2011-08-08
```

参考TDateTime Yesterday Tomorrow

####### Yesterday

用途：日期时间相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
Datetime := Yesterday();
return DateToStr(datetime); // 输出2011-08-07
```

参考TDateTime Today Tomorrow

####### Tomorrow

用途：日期时间相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
Datetime := Tomorrow();
return DateToStr(datetime); // 输出2011-08-09
```

参考TDateTime Today Yesterday

####### IsToday

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
Today := today();
Aday := today + 2;
if istoday(aday) then return "aday is today "
else return "aday is not today "; // 输出aday is not today
```

参考TDateTime

####### IsSameDay

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
Today := today();
Aday := today + 2;
if isSameDay(aday, today) then return "sameday "
else return " not sam day"; // 输出:not sameday
```

参考TDateTime

###### 分解函数

####### 内容

- DateOf
- TimeOf
- YearOf
- MonthOf
- DayOf
- HourOf
- MinuteOf
- SecondOf
- MilliSecondOf

####### DateOf

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return DateOf(now()); // 返回今天的日期
```

参考TDateTime TimeOf DecodeDate

####### TimeOf

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return TimeOf (now()); // 返回当前所处的时间点
// 截取某个日期时间的时间点
EndT := strtodatetime("2014-01-17 10:00:00");
return TimeOf(EndT); // 返回0.4167
```

参考TDateTime DecodeTime DateOf

####### YearOf

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := Yearof(strToDate('2010-08-08'));
return year;
// 输出: 2010
```

参考TDateTime DecodeDate MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf

####### MonthOf

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
month := Monthof(strToDate('2010-08-08'));
return month; // 输出: 8
```

参考TDateTime DecodeDate YearOf DayOf HourOf MinuteOf SecondOf MilliSecondOf

####### DayOf

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
hour := dayof(strtodatetime('2011-08-08 11:22:06'));
return hour; // 输出: 8
```

参考TDateTime DecodeDate YearOf MonthOf HourOf MinuteOf SecondOf MilliSecondOf

####### HourOf

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
hour := hourof(strtodatetime('2011-08-08 11:22:06'));
return hour; // 输出: 11
```

参考TDateTime DecodeDate YearOf MonthOf DayOf MinuteOf SecondOf MilliSecondOf

####### MinuteOf

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
minute := minuteof(strtodatetime('2011-08-08 11:22:06'));
return minute; // 输出: 22
```

参考TDateTime DecodeDate YearOf MonthOf DayOf HourOf SecondOf MilliSecondOf

####### SecondOf

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
second := secondof(strtodatetime('2011-08-08 11:22:06'));
return second; // 输出: 6
```

参考TDateTime DecodeDate YearOf MonthOf DayOf HourOf MinuteOf MilliSecondOf

####### MilliSecondOf

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
millisecond := Millisecondof(StrToDateTime('2011-08-08 11:22:06.990'));
return millisecond; // 输出: 990
```

参考TDateTime DecodeDate YearOf MonthOf DayOf HourOf MinuteOf SecondOf

###### 起始结束函数

####### 内容

- StartOfTheYear
- EndOfTheYear
- StartOfAYear
- EndOfAYear
- StartOfTheMonth
- EndOfTheMonth
- StartOfAMonth
- EndOfAMonth
- StartOfTheWeek
- EndOfTheWeek
- StartOfAWeek
- EndOfAWeek
- StartOfTheDay
- EndOfTheDay
- StartOfADay
- EndOfADay
- StartOfTheHalfYear
- StartOfTheQuarter
- EndOfTheQuarter
- EndOfTheHalfYear

####### StartOfTheYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
dTime := StartOfTheYear(StrToDateTime('2011-08-08 11:22:06.990'));
return dateTimeToStr(dTime); // 输出: 2011-01-01
```

参考TDateTime EndOfTheYear StartOfAYear EndOfAYear StartOfTheMonth EndOfTheMonth
StartOfAMonth EndOfAMonth StartOfTheWeek EndOfTheWeek StartOfAWeek EndOfAWeek
StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### EndOfTheYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := EndOfTheYear(StrToDateTime('2011-08-08 11:22:06.990'));
return dateTimeToStr(year); // 输出: 2011-12-31 23:59:59
```

参考TDateTime StartOfTheYear StartOfAYear EndOfAYear StartOfTheMonth
EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek EndOfTheWeek StartOfAWeek
EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### StartOfAYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := StartOfAYear(2011);
return datetimetostr(year); // 输出: 2011-01-01
```

参考TDateTime StartOfTheYear EndOfTheYear EndOfAYear StartOfTheMonth
EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek EndOfTheWeek StartOfAWeek
EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### EndOfAYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := EndOfAYear(2011);
return datetimetostr(year); // 输出: 2011-12-31 23:59:59
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear StartOfTheMonth
EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek EndOfTheWeek StartOfAWeek
EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### StartOfTheMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := StartOfTheMonth(strtodatetime('2011-08-08 12:48:22.990'));
return datetimetostr(year); // 输出: 2011-08-01
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear EndOfTheMonth
StartOfAMonth EndOfAMonth StartOfTheWeek EndOfTheWeek StartOfAWeek EndOfAWeek
StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### EndOfTheMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := EndOfTheMonth(strtodatetime('2011-08-08 12:48:22.990'));
return DatetimeToStr(year); // 输出: 2011-08-31 23:59:59
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek EndOfTheWeek
StartOfAWeek EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### StartOfAMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
tdate := StartOfAMonth(2011, 08);
return dateTimeToStr(tdate); // 输出: 2011-08-01
```

参考TDateTime

####### EndOfAMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
Ttime := EndOfAMonth(2011, 08);
return datetimetostr(Ttime); // 输出: 2011-08-31 23:59:59
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth StartOfAMonth StartOfTheWeek EndOfTheWeek
StartOfAWeek EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### StartOfTheWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := StartOfTheWeek(strtodatetime('2011-08-07'));
return datetimetostr(year); // 输出: 2011-08-01
// 其中2011-08-07是星期天，2011-08-01是星期一
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth StartOfAMonth EndOfAMonth EndOfTheWeek
StartOfAWeek EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### EndOfTheWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := EndOfTheWeek(strtodatetime('2011-08-01'));
return datetimetostr(year); // 输出: 2011-08-07 23:59:59
// 其中2011-08-01是星期一，输出结果2011-08-07是星期天
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek EndOfTheWeek
StartOfAWeek EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### StartOfAWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
// 取当年的第一个完整周
year := StartOfAWeek(2011, 1, 1);
return datetimetostr(year); // 输出: 2011-01-03
```

范例二：

```tsl
year := StartOfAWeek(2011, 2, 1);
return datetimetostr(year); // 输出：2011-01-10
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth EndOfAMonth StartOfTheWeek EndOfTheWeek
StartOfAWeek EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### EndOfAWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
year := EndOfAWeek(2011, 1, 7);
return datetimetostr(year); // 输出: 2011-01-09 23:59:59
```

范例二：

```tsl
year := EndOfAWeek (2011, 2, 7);
return datetimetostr(year); // 输出：2011-01-16 23:59:59
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek
EndOfTheWeek StartOfAWeek StartOfTheDay EndOfTheDay StartOfADay EndOfADay

####### StartOfTheDay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := StartOfTheDay(strtodatetime('2011-08-08 23:59:59'));
return datetimetostr(year); // 输出: 2011-08-08
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek
EndOfTheWeek StartOfAWeek EndOfAWeek EndOfTheDay StartOfADay EndOfADay

####### EndOfTheDay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := EndOfTheDay(strtodatetime('2011-08-08 01:01:10'));
return datetimetostr(year); // 输出: 2011-08-08 23:59:59
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek
EndOfTheWeek StartOfAWeek EndOfAWeek StartOfTheDay StartOfADay EndOfADay

####### StartOfADay

范例

```tsl
year := StartofADay(2011, 8, 8);
return datetimetostr(year); // 输出: 2011-08-08
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek
EndOfTheWeek StartOfAWeek EndOfAWeek StartOfTheDay EndOfTheDay EndOfADay

####### EndOfADay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
year := EndOfADay(2015, 1, 5);
return datetimetostr(year); // 输出: 2015-01-05 23:59:59
```

参考TDateTime StartOfTheYear EndOfTheYear StartOfAYear EndOfAYear
StartOfTheMonth EndOfTheMonth StartOfAMonth EndOfAMonth StartOfTheWeek
EndOfTheWeek StartOfAWeek EndOfAWeek StartOfTheDay EndOfTheDay StartOfADay

####### StartOfTheHalfYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
EndT := 40599; // 40559表示2011年1月16号
return StartOfTheHalfYear(EndT);
// 结果：40544  //40544表示2011年1月1号
```

####### StartOfTheQuarter

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
EndT := 40540; // 40540表示2010年12月28日
return StartOfTheQuarter (EndT);
// 结果：40452  //40452表示2010年10月1号
```

####### EndOfTheQuarter

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
EndT := 40540; // 40540表示2010年12月28日
return EndOfTheQuarter (EndT);
// 结果：40543  //40543表示2010年12月31号
```

####### EndOfTheHalfYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
EndT := 40540; // 40540表示2010年12月28日
return EndOfTheHalfYear (EndT);
// 结果：40543  //40543表示2010年12月31号
```

###### 关系函数

####### 内容

- HourOfTheYear
- HourOfTheMonth
- MonthOfTheYear
- MilliSecondOfTheYear
- WeekOfTheYear
- WeekOfTheMonth
- MinuteOfTheYear
- SecondOfTheYear
- DayOfTheYear
- DayOfTheMonth
- SecondOfTheMinute
- HourOfTheWeek
- SecondOfTheMonth
- DayOfTheWeek
- MinuteOfTheDay
- MilliSecondOfTheSecond
- SecondOfTheWeek
- MinuteOfTheMonth
- MinuteOfTheHour
- MinuteOfTheWeek
- MilliSecondOfTheDay
- MilliSecondOfTheMonth
- HourOfTheDay
- MilliSecondOfTheHour
- SecondOfTheHour
- MilliSecondofTheMinute
- SecondOfTheDay
- MilliSecondOfTheWeek

####### HourOfTheYear

范例

```tsl
hour := HourOfTheYear(strtodatetime('2011-01-03 10:00:00'));
return hour; // 输出: 58
```

参考TDateTime HourOf MonthOfTheYear WeekOfTheYear DayOfTheYear MinuteOfTheYear
SecondOfTheYear MilliSecondOfTheYear

####### HourOfTheMonth

范例

```tsl
hour := HourOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return hour; // 输出: 514
```

参考TDateTime HourOf WeekOfTheMonth DayOfTheMonth MinuteOfTheMonth
SecondOfTheMonth MilliSecondOfTheMonth

####### MonthOfTheYear

范例

```tsl
month := MonthOfTheYear(strtodate('2011-08-08'));
return month; // 输出: 8
```

参考TDateTime MonthOf WeekOfTheYear DayOfTheYear HourOfTheYear MinuteOfTheYear
SecondOfTheYear MilliSecondOfTheYear

####### MilliSecondOfTheYear

范例

```tsl
millisecond := MilliSecondOfTheYear(strtodatetime('2011-01-03'));
return millisecond; // 输出: 172800000
```

参考TDateTime MilliSecondOf MonthOfTheYear WeekOfTheYear DayOfTheYear
HourOfTheYear MinuteOfTheYear SecondOfTheYear

####### WeekOfTheYear

范例

```tsl
week := WeekOfTheYear(strtodate('2011-01-03'));
return week; // 输出: 1
```

参考TDateTime MonthOfTheYear DayOfTheYear HourOfTheYear MinuteOfTheYear
SecondOfTheYear MilliSecondOfTheYear

####### WeekOfTheMonth

定义1：WeekOfTheMonth(AValue: TDateTime): Integer;

说明：返回由参数AValue指定的时间是处于当月的第几个周。

注意：使用了ISO8601标准，这意味着可能指定的时间所处的周不属于当前月份，那么返回的将是相对与其他月份的周数。如果当月1号是周四及周四之前，则本周会纳入本月，即本周是本月的第一周，如果当月1号是周四之后，比如是周五，则还属于上月的周期内，即为上月的最后一周。

参数：

- AValue：TDateTime类型，日期时间
- AYear：整数，年，返回值
- AMonth：整数，月，返回值

返回：整数，值域是[1，6]

范例：

```tsl
month := weekOfTheMonth(strtodatetime('2011-01-22'));
return month; // 输出: 3
```

定义2：WeekOfTheMonth(AValue: TDateTime; var AYear, AMonth: Integer): Integer;

说明：返回由参数AValue指定的时间是处于当月的第几个周。

注意：使用了ISO8601标准，这意味着可能指定的时间所处的周不属于当前月份，那么返回的将是相对与其他月份的周数，通过参数Ayear，Amonth将所属的年份和月份返回

参数：

- AValue：TDateTime类型，日期时间
- AYear：整数，年，返回值
- AMonth：整数，月，返回值

返回：整数，值域是[1，6]

范例：

```tsl
week := WeekOfTheMonth(strtodatetime('2011-01-22'), 2011, 1);
return week; // 输出: 3
```

参考：TDateTime，DayOfTheMonth，HourOfTheMonth，MinuteOfTheMonth，SecondOfTheMonth，MilliSecondOfTheMonth

####### MinuteOfTheYear

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
minute := MinuteOfTheYear(strtodatetime('2011-01-03 10:00:00'));
return minute; // 输出: 3480
```

参考TDateTime MinuteOf MonthOfTheYear WeekOfTheYear DayOfTheYear HourOfTheYear
SecondOfTheYear MilliSecondOfTheYear

####### SecondOfTheYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
second := SecondOfTheYear(strtodatetime('2011-01-03'));
return second; // 输出: 208800
```

参考TDateTime SecondOf MonthOfTheYear WeekOfTheYear DayOfTheYear HourOfTheYear
MinuteOfTheYear MilliSecondOfTheYear

####### DayOfTheYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
d := DayOfTheYear(strtodate('2011-01-03'));
return d; // 输出: 3
```

参考TDateTime DayOf MonthOfTheYear WeekOfTheYear HourOfTheYear MinuteOfTheYear
SecondOfTheYear MilliSecondOfTheYear

####### DayOfTheMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
day := DayOfTheMonth(strtodatetime('2011-01-22'));
return day; // 输出: 22
```

参考TDateTime DayOf WeekOfTheMonth HourOfTheMonth MinuteOfTheMonth
SecondOfTheMonth MilliSecondOfTheMonth

####### SecondOfTheMinute

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
second := SecondOfTheMinute(strtodatetime('2011-01-05 01:30:01'));
return second; // 输出: 1
```

参考TDateTime SecondOf MilliSecondofTheMinute MilliSecondOfTheSecond

####### HourOfTheWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
hour := HourOfTheWeek(strtodatetime('2011-01-05 10:00:00'));
return hour; // 输出: 58
```

参考TDateTime HourOf DayOfTheWeek MinuteOfTheWeek SecondOfTheWeek
MilliSecondOfTheWeek

####### SecondOfTheMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
second := SecondOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return second; // 输出: 1850400
```

参考TDateTime SecondOf WeekOfTheMonth DayOfTheMonth HourOfTheMonth
MinuteOfTheMonth MilliSecondOfTheMonth

####### DayOfTheWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
Dayofweek := DayOfTheWeek(strtodatetime('2011-01-03'));
return dayofweek;
// 输出: 1
```

参考TDateTime DayOf HourOfTheWeek MinuteOfTheWeek SecondOfTheWeek
MilliSecondOfTheWeek

####### MinuteOfTheDay

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
minute := MinuteOfTheDay(strtodatetime('2011-01-05 01:22:22'));
return minute; // 输出: 82
```

参考TDateTime MinuteOf HourOfTheDay SecondOfTheDay MilliSecondOfTheDay

####### MilliSecondOfTheSecond

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
millisecond := MilliSecondOfTheSecond(strtodatetime('2011-01-05 01:30:01.990'));
return millisecond; // 输出:990
```

参考TDateTime MilliSecondOf MilliSecondofTheMinute

####### SecondOfTheWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
second := SecondOfTheWeek(strtodatetime('2011-01-05 10:00:00'));
return second; // 输出: 208800
```

参考TDateTime SecondOf DayOfTheWeek HourOfTheWeek MinuteOfTheWeek
MilliSecondOfTheWeek

####### MinuteOfTheMonth

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
minute := MinuteOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return minute; // 输出: 30840
```

参考TDateTime MinuteOf WeekOfTheMonth DayOfTheMonth HourOfTheMonth
SecondOfTheMonth MilliSecondOfTheMonth

####### MinuteOfTheHour

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
minute := MinuteOfTheHour(strtodatetime('2011-01-05 01:30:01'));
return minute; // 输出: 30
```

参考TDateTime MinuteOf MinuteOfTheHour SecondOfTheHour MilliSecondOfTheHour

####### MinuteOfTheWeek

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
minute := MinuteOfTheWeek(strtodatetime('2011-01-05 10:00:00'));
return minute; // 输出: 3480
```

参考TDateTime MinuteOf DayOfTheWeek HourOfTheWeek SecondOfTheWeek
MilliSecondOfTheWeek

####### MilliSecondOfTheDay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
millisecond := MilliSecondOfTheDay(strtodatetime('2011-01-05 01:30:01'));
return millisecond; // 输出: 5401000
```

参考TDateTime MilliSecondOf HourOfTheDay MinuteOfTheDay SecondOfTheDay

####### MilliSecondOfTheMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
millisecond := MilliSecondOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return millisecond; // 输出: 1850400000
```

参考TDateTime MilliSecondOf WeekOfTheMonth DayOfTheMonth HourOfTheMonth
MinuteOfTheMonth SecondOfTheMonth

####### HourOfTheDay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
hour := HourOfTheDay(strtodatetime('2011-01-05 23:22:22'));
return hour; // 输出: 23
```

参考TDateTime HourOf MinuteOfTheDay SecondOfTheDay MilliSecondOfTheDay

####### MilliSecondOfTheHour

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
millisecond := MilliSecondOfTheHour(strtodatetime('2011-01-05 01:30:01'));
return millisecond; // 输出: 1801000
```

参考TDateTime MilliSecondOf MinuteOfTheHour SecondOfTheHour

####### SecondOfTheHour

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
second := SecondOfTheHour(strtodatetime('2011-01-05 01:30:01'));
return second; // 输出: 1801
```

参考TDateTime SecondOf MinuteOfTheHour MilliSecondOfTheHour

####### MilliSecondofTheMinute

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
millisecond := MilliSecondofTheMinute(strtodatetime('2011-01-05 01:30:01'));
return millisecond; // 输出: 1000
```

参考TDateTime SecondOf MilliSecondOf MilliSecondOfTheSecond

####### SecondOfTheDay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
second := SecondOfTheDay(strtodatetime('2011-01-05 01:30:01'));
return second; // 输出: 5401
```

参考TDateTime SecondOf HourOfTheDay MinuteOfTheDay MilliSecondOfTheDay

####### MilliSecondOfTheWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
millisecond := MilliSecondOfTheWeek(strtodatetime('2011-01-05 10:00:00'));
return millisecond; // 输出: 208800000
```

参考TDateTime MilliSecondOf DayOfTheWeek HourOfTheWeek MinuteOfTheWeek
SecondOfTheWeek

###### 范围判定函数

####### 内容

- WithinPastYears
- WithinPastMonths
- WithinPastWeeks
- WithinPastDays
- WithinPastHours
- WithinPastMinutes
- WithinPastSeconds
- WithinPastMilliSeconds

####### WithinPastYears

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
// 2010年1月5日至2013年1月4日之间，不足3年，因此，判断为2年内
flag := WithinPastYears(strtodatetime('2010-01-05'), strtodatetime('2013-01-04'), 2);
return flag; // 输出: 1
```

范例二：

```tsl
// //2010年1月5日至2013年1月5日之间，相隔 3年，因此，判断为不在2年内
flag := WithinPastYears(strtodatetime('2010-01-05'), strtodatetime('2013-01-05'), 2);
return flag; // 输出: 0
```

参考TDateTime WithinPastMonths WithinPastWeeks WithinPastDays WithinPastHours
WithinPastSeconds WithinPastMinutes WithinPastMilliSeconds

####### WithinPastMonths

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
// 2011年1月5日到2011年7月6日的天数是182，而天数必须大于182.62(6*30.4375)，才能达到6个月，所以，1月5日还属于7月6日前推5个月范围内。
flag := WithinPastMonths(strtodatetime('2011-01-05'), strtodatetime('2011-07-06'), 5);
return flag; // 输出: 1
```

范例二：

```tsl
flag := WithinPastMonths(strtodatetime('2011-01-05'), strtodatetime('2011-07-07'), 5);
return flag; // 输出: 0
```

参考TDateTime WithinPastYears WithinPastWeeks WithinPastDays WithinPastHours
WithinPastSeconds WithinPastMinutes WithinPastMilliSeconds

####### WithinPastWeeks

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
// 2011年1月1日至2011年1月28日之间的天数为27天，不足28天(4*7)，所以仍在3周内
flag := WithinPastWeeks(strtodatetime('2011-01-01'), strtodatetime('2011-01-28'), 3);
return flag; // 输出: 1
```

范例二：

```tsl
// 2011年1月1日至2011年1月28日之间的天数为27天，不足28天(4*7)，所以仍在3周内
flag := WithinPastWeeks(strtodatetime('2011-01-01'), strtodatetime('2011-01-29'), 3);
return flag; // 输出: 0
```

参考TDateTime WithinPastYears WithinPastMonths WithinPastDays WithinPastHours
WithinPastSeconds WithinPastMinutes WithinPastMilliSeconds

####### WithinPastDays

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
flag := WithinPastDays(strtodate('2011-01-01'), strtodate('2011-01-11'), 10);
return flag; // 输出: 1
```

范例二：

```tsl
flag := WithinPastDays(strtodate('2011-01-01'), strtodate('2011-01-12'), 10);
return flag; // 输出: 0
```

参考TDateTime WithinPastYears WithinPastMonths WithinPastWeeks WithinPastHours
WithinPastSeconds WithinPastMinutes WithinPastMilliSeconds

####### WithinPastHours

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
// 不足11个小时
flag := WithinPastHours(strtodatetime('2011-01-01 00:00:00'), strtodatetime('2011-01-01 10:30:00'), 10);
return flag; // 输出: 1
```

范例二：

```tsl
flag := WithinPastHours(strtodatetime('2011-01-01 00:00:00'), strtodatetime('2011-01-01 11:00:00'), 10);
return flag; // 输出: 0
```

参考TDateTime WithinPastYears WithinPastMonths WithinPastWeeks WithinPastDays
WithinPastSeconds WithinPastMinutes WithinPastMilliSeconds

####### WithinPastMinutes

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
flag := WithinPastMinutes(strtodatetime('2011-01-01 10:00:00'), strtodatetime('2011-01-01 10:10:00'), 10);
return flag; // 输出: 1

flag := WithinPastMinutes(strtodatetime('2011-01-01 10:00:00'), strtodatetime('2011-01-01 10:11:00'), 10);
return flag; // 输出: 0
```

参考TDateTime WithinPastYears WithinPastMonths WithinPastWeeks WithinPastDays
WithinPastHours WithinPastSeconds WithinPastMilliSeconds

####### WithinPastSeconds

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
flag := WithinPastSeconds(strtodatetime('2011-01-01 10:00:00'), strtodatetime('2011-01-01 10:00:10'), 10);
return flag; // 输出: 1
```

范例二：

```tsl
flag := WithinPastSeconds(strtodatetime('2011-01-01 10:00:00'), strtodatetime('2011-01-01 10:00:11'), 10);
return flag; // 输出: 0
```

参考TDateTime WithinPastYears WithinPastMonths WithinPastWeeks WithinPastDays
WithinPastHours WithinPastMinutes WithinPastMilliSeconds

####### WithinPastMilliSeconds

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
ANow := strtodatetime('2011-01-01 10:00:00.100');
AThen := strtodatetime('2011-01-01 10:00:00.200');
flag := WithinPastMilliSeconds(ANow, AThen , 100);
return flag; // 输出: 1
```

参考TDateTime WithinPastYears WithinPastMonths WithinPastWeeks WithinPastDays
WithinPastHours WithinPastSeconds WithinPastMinutes

###### 范围获得函数

####### 内容

- YearsBetween
- MonthsBetween
- WeeksBetween
- DaysBetween
- HoursBetween
- MinutesBetween
- SecondsBetween
- MilliSecondsBetween

####### YearsBetween

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
years := YearsBetween(strtodatetime('2009-01-01 00:00:00'), strtodatetime('2011-01-01 23:59:59.999'));
return years; // 输出: 2
```

参考TDateTime MonthsBetween WeeksBetween DaysBetween HoursBetween MinutesBetween
SecondsBetween MilliSecondsBetween

####### MonthsBetween

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
months := MonthsBetween(strtodatetime('2011-05-01'), strtodatetime('2011-08-01'));
return months; // 输出: 3
```

参考TDateTime YearsBetween WeeksBetween DaysBetween HoursBetween MinutesBetween
SecondsBetween MilliSecondsBetween

####### WeeksBetween

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
weeks := WeeksBetween(strtodatetime('2011-05-01'), strtodatetime('2011-08-01'));
return weeks; // 输出: 13
```

参考TDateTime YearsBetween MonthsBetween DaysBetween HoursBetween MinutesBetween
SecondsBetween MilliSecondsBetween

####### DaysBetween

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
days := DaysBetween(strtodate('2011-05-01'), strtodate('2011-08-01'));
return days; // 输出: 92
```

范例二：

```tsl
// 不足完整的一天：39815.04167-39814.08333=0.95834
// 2009-01-01 02:00:00：日期时间为39814.08333
// 2009-01-02 01:00:00：日期时间为39815.04167
days := DaysBetween(strtodatetime('2009-01-01 02:00:00'), strtodatetime('2009-01-02 01:00:00'));
return days; // 输出: 0
```

参考TDateTime YearsBetween MonthsBetween WeeksBetween HoursBetween
MinutesBetween SecondsBetween MilliSecondsBetween

####### HoursBetween

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
Hours := HoursBetween(strtodatetime('2011-08-01 00:00:00'), strtodatetime('2011-08-01 12:00:00'));
return hours; // 输出: 12
```

参考TDateTime YearsBetween MonthsBetween WeeksBetween DaysBetween MinutesBetween
SecondsBetween MilliSecondsBetween

####### MinutesBetween

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
minutes := MinutesBetween(strtodatetime('2011-08-01 00:00:00'), strtodatetime('2011-08-01 12:00:00'));
return minutes; // 输出: 720
```

参考TDateTime YearsBetween MonthsBetween WeeksBetween DaysBetween HoursBetween
SecondsBetween MilliSecondsBetween

####### SecondsBetween

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
seconds := SecondsBetween(strtodatetime('2011-08-01 00:00:00'), strtodatetime('2011-08-01 12:00:00'));
return seconds; // 输出: 43200
```

参考TDateTime YearsBetween MonthsBetween WeeksBetween DaysBetween HoursBetween
MinutesBetween MilliSecondsBetween

####### MilliSecondsBetween

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
BegT := strtodatetime('2011-08-01 00:00:00');
EndT := strtodatetime('2011-08-01 12:00:00');
milliseconds := MilliSecondsBetween(BegT, EndT);
return milliseconds; // 输出: 43200000
```

参考TDateTime YearsBetween MonthsBetween WeeksBetween DaysBetween HoursBetween
MinutesBetween SecondsBetween

###### 范围生成函数

####### 内容

- YearSpan
- MonthSpan
- WeekSpan
- DaySpan
- HourSpan
- MinuteSpan
- SecondSpan
- MilliSecondSpan

####### YearSpan

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
years := YearSpan(strtodatetime('2010-08-01 00:00:00'), strtodatetime('2012-08-01 12:00:00'));
return years; // 输出: 2.00274
```

参考TDateTime MonthSpan WeekSpan DaySpan HourSpan MinuteSpan SecondSpan
MilliSecondSpan

####### MonthSpan

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
months := MonthSpan(strtodatetime('2010-08-01 00:00:00'), strtodatetime('2012-08-01 12:00:00'));
return months; // 输出: 24.03
```

参考TDateTime YearSpan WeekSpan DaySpan HourSpan MinuteSpan SecondSpan
MilliSecondSpan

####### WeekSpan

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
BegT := strtodatetime('2010-08-01 00:00:00');
EndT := strtodatetime ('2012-08-01 12:00:00');
weeks := WeekSpan(BegT, EndT);
return weeks; // 输出: 104.5
```

参考TDateTime YearSpan MonthSpan DaySpan HourSpan MinuteSpan SecondSpan
MilliSecondSpan

####### DaySpan

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
BegT := strtodatetime('2010-08-01 00:00:00');
EndT := strtodatetime('2012-08-01 12:00:00');
days := DaySpan(BegT, EndT);
return days; // 输出: 731.5
```

参考TDateTime YearSpan MonthSpan WeekSpan HourSpan MinuteSpan SecondSpan
MilliSecondSpan

####### HourSpan

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
hours := HourSpan(strtodatetime('2010-08-01 00:00:00'), strtodatetime('2012-08-01 12:00:00'));
return hours; // 输出: 17556
```

参考TDateTime YearSpan MonthSpan WeekSpan DaySpan MinuteSpan SecondSpan
MilliSecondSpan

####### MinuteSpan

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
BegT := strtodatetime('2010-08-01 00:00:00');
EndT := strtodatetime('2012-08-01 12:00:00');
minutes := MinuteSpan(BegT, EndT);
return minutes; // 输出: 1053360
```

参考TDateTime YearSpan MonthSpan WeekSpan DaySpan HourSpan SecondSpan
MilliSecondSpan

####### SecondSpan

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
BegT := strtodatetime('2010-08-01 00:00:00');
EndT := strtodatetime('2012-08-01 12:00:00');
seconds := SecondSpan(BegT, EndT);
return seconds; // 输出: 63201600
```

参考TDateTime YearSpan MonthSpan WeekSpan DaySpan HourSpan MinuteSpan
MilliSecondSpan

####### MilliSecondSpan

范例

```tsl
BegT := strtodatetime('2010-08-01 00:00:00');
EndT := strtodatetime('2012-08-01 12:00:00');
milliseconds := SecondSpan(BegT, EndT);
return milliseconds; // 输出: 63201600000
```

参考TDateTime YearSpan MonthSpan WeekSpan DaySpan HourSpan MinuteSpan SecondSpan

###### 时间推移函数

####### 内容

- IncYear
- IncHalfYear
- IncQuarter
- IncMonth
- IncWeek
- IncDay
- IncHour
- IncMinute
- IncSecond
- IncMilliSecond

####### IncYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
incyears := IncYear(strtodatetime('2010-08-01'), 10);
return datetostr(incyears); // 输出: 2020-08-01
```

参考TDateTime

####### IncHalfYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
Avalue := 40179; // 40179表示2010年1月1号
Number := 2;
return IncHalfYear(AValue, Number);
// 结果：40544  //40544表示2011年1月1号
```

####### IncQuarter

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
Avalue := 40179; // 40179表示2010年1月1号
Number := 2;
return IncQuarter(AValue, Number);
// 结果：40360  //40360表示2010年7月1号
```

####### IncMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
incmonths := IncMonth(strtodatetime('2010-08-01'), 2);
return datetostr(incmonths); // 输出: 2010-10-01
```

参考TDateTime

####### IncWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
incweeks := IncWeek(strtodatetime('2010-08-01'), 1);
return datetostr(incweeks); // 输出: 2010-08-08
```

参考TDateTime

####### IncDay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
incdays := IncDay(strtodatetime('2010-08-01'), 10);
return datetostr(incdays); // 输出: 2010-08-11
```

参考TDateTime

####### IncHour

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
inchours := IncHour(strtodatetime('2010-08-01 00:01:01'), 10);
return datetimetostr(inchours); // 输出: 2010-08-01 10:01:01
```

参考TDateTime

####### IncMinute

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
incminutes := IncMinute(strtodatetime('2010-08-01 00:01:01'), 50);
return datetimetostr(incminutes); // 输出: 2010-08-01 00:51:01
```

参考TDateTime

####### IncSecond

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
incseconds := IncSecond(strtodatetime('2010-08-01 00:01:01'), 50);
return datetimetostr(incseconds); // 输出: 2010-08-01 00:01:51
```

参考TDateTime

####### IncMilliSecond

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
incmilliseconds := IncMilliSecond(strtodatetime('2010-08-01 00:01:01.950'), 50);
return datetimetostr(incmilliseconds); // 输出: 2010-08-01 00:01:02
```

参考TDateTime

###### 组合、分解日期函数

####### 内容

- EncodeDateTime
- DecodeDateTime
- EncodeDateWeek
- DecodeDateWeek
- DecodeDateDay
- EncodeDateMonthWeek
- DecodeDateMonthWeek
- TryEncodeDateTime
- TryEncodeDateWeek
- TryEncodeDateDay
- TryEncodeDateMonthWeek

####### EncodeDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
timeset := EncodeDateTime(2011, 08, 08, 09, 32, 45, 990);
return datetimetostr(timeset); // 输出: 2011-08-08 09:32:45
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
DecodeDateTime EncodeDateWeek DecodeDateWeek DecodeDateDay EncodeDateMonthWeek
DecodeDateMonthWeek

####### DecodeDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
EndT := strtodatetime('2011-08-08 12:09:10.990');
DecodeDateTime(EndT, year, month, day, hour, minute, second, millisecond);
return array(year, month, day, hour, minute, second, millisecond);
// 输出：array(2011,8,8,12,9,10,990)
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
EncodeDateTime EncodeDateWeek DecodeDateWeek DecodeDateDay EncodeDateMonthWeek
DecodeDateMonthWeek

####### EncodeDateWeek

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
// 一个自然周至少要有4天属于该年的日期，这一周才属于这年。
// 1月1日和1月2日所属周只有2天处于2011年，所以，这周属于2010年，2011年的第一周从2011年1月3日算起
week := EncodeDateWeek(2011, 1, 1);
return datetostr(week);
// 输出: 2011-01-03
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
EncodeDateTime DecodeDateTime DecodeDateWeek DecodeDateDay EncodeDateMonthWeek
DecodeDateMonthWeek

####### DecodeDateWeek

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
DecodeDateWeek(strtodatetime('2011-08-08'), year, weekofyear, dayofweek);
return array( year, weekofyear, dayofweek);
// 输出: array(2011, 32,1)
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
EncodeDateTime DecodeDateTime EncodeDateWeek DecodeDateDay EncodeDateMonthWeek
DecodeDateMonthWeek

####### DecodeDateDay

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
DecodeDateDay(strtodatetime('2011-08-08'), year, dayofyear);
return array(year, dayofyear);
// 输出:  array(2011,220)
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
EncodeDateTime DecodeDateTime EncodeDateWeek DecodeDateWeek EncodeDateMonthWeek
DecodeDateMonthWeek

####### EncodeDateMonthWeek

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
monthweek := EncodeDateMonthWeek(2011, 8, 2, 1);
return datetimetostr(monthweek); // 输出:  2011-08-08
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
EncodeDateTime DecodeDateTime EncodeDateWeek DecodeDateWeek DecodeDateDay
DecodeDateMonthWeek

####### DecodeDateMonthWeek

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
DecodeDateMonthWeek(strtoDatetime("2011-08-10"), year, month, weekofMonth, dayOfWeek1);
return array(year, month, weekofMonth, dayOfWeek1); // 输出:  array(2011,8,2,3)
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
EncodeDateTime DecodeDateTime EncodeDateWeek DecodeDateWeek DecodeDateDay
EncodeDateMonthWeek

####### TryEncodeDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
Flag := TryEncodeDateTime(2011, 8, 10, 10, 01, 01, 999, Atime);
return array(flag, datetimetostr(Atime)); // 输出:  array(1,'2011-08-10 10:01:01')
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
TryEncodeDateWeek TryEncodeDateDay TryEncodeDateMonthWeek

####### TryEncodeDateWeek

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
Flag := TryEncodeDateWeek(2011, 1, Atime, 1);
return array(flag, datetimetostr(Atime)); // 输出:  array(1,'2011-01-03')
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
TryEncodeDateTime TryEncodeDateDay TryEncodeDateMonthWeek

####### TryEncodeDateDay

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
Flag := TryEncodeDateDay(2011, 1, Atime);
return array(flag, datetimetostr(Atime)); // 输出:  array(1,'2011-01-01')
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
TryEncodeDateTime TryEncodeDateWeek TryEncodeDateMonthWeek

####### TryEncodeDateMonthWeek

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
Flag := TryEncodeDateMonthWeek(2011, 1, 1, 1, Atime);
return array(flag, datetimetostr(Atime)); // 输出:  array(1,'2011-01-03')
```

参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
TryEncodeDateTime TryEncodeDateWeek TryEncodeDateDay

###### 日期重组函数

####### 内容

- RecodeYear
- RecodeMonth
- RecodeDay
- RecodeHour
- RecodeMinute
- RecodeSecond
- RecodeMilliSecond
- RecodeDate
- RecodeTime
- RecodeDateTime
- TryRecodeDateTime
- CompareDateTime
- SameDateTime
- CompareDate
- SameDate
- CompareTime
- SameTime
- NthDayOfWeek
- DecodeDayOfWeekInMonth
- EncodeDayOfWeekInMonth
- TryEncodeDayOfWeekInMonth

####### RecodeYear

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
newTime := RecodeYear(strtoDatetime("2010-08-01"), 2009);
return datetimetostr(newTime); // 输出:  2009-08-01
```

范例二：

```tsl
// 用try...except...end语句进行异常处理，如果无法替换成有效的日期，则把NewTime设置为0.
try
    newTime := RecodeYear(strtoDatetime("2012-02-29"), 2013);
except
    newTime := 0;
end;
return newTime; // 输出:  0
```

参考TDateTime

####### RecodeMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
try
    newTime := RecodeMonth(strtodatetime("2011-08-10"), 10);
    newTime := datetimetostr(newTime);
except
    newTime := 0;
end;
return newTime; // 输出:  2011-10-10
```

范例二：

```tsl
try
    newTime := RecodeMonth(strtodatetime("2013-3-31"), 4);
    newTime := datetimetostr(newTime);
except
    newTime := 0;
end;
return newTime; // 输出:  0
```

参考TDateTime

####### RecodeDay

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
try
    newTime := RecodeDay(strtodatetime("2011-08-10"), 1);
    newTime := datetostr(newTime);
except
    newTime := 0;
end;
return newTime; // 输出:  2011-08-01
```

范例二：

```tsl
try
    newTime := RecodeDay(strtodatetime("2011-02-28"), 31);
    newTime := datetostr(newTime);
except
    newTime := 0;
end;
return newTime; // 输出:  0
```

参考TDateTime

####### RecodeHour

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
newTime := RecodeHour(strtodatetime("2011-08-10 12:12:12"), 1);
return datetimetostr(newTime); // 输出:  2011-08-10 01:12:12
```

参考TDateTime

####### RecodeMinute

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
newTime := RecodeMinute (strtodatetime("2011-08-10 12:12:12"), 9);
return datetimetostr(newTime); // 输出:  2011-08-10 12:09:12
```

参考TDateTime

####### RecodeSecond

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
newTime := RecodeSecond(strtodatetime("2011-08-10 12:12:12"), 9);
return datetimetostr(newTime); // 输出:  2011-08-10 12:12:09
```

参考TDateTime

####### RecodeMilliSecond

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
newTime := RecodeMilliSecond(strtodatetime("2011-08-10 12:12:12.999"), 100);
return MilliSecondOf (newTime); // 输出: 100
```

参考TDateTime

####### RecodeDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
newTime := RecodeDate(strtodatetime("2011-08-10 12:12:12"), 2010, 8, 9);
return datetimetostr(newTime); // 输出: 2010-08-09 12:12:12
```

参考TDateTime

####### RecodeTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
newTime := RecodeTime(strtodatetime("2011-08-10 12:12:12.999"), 10, 8, 9, 100);
return datetimetostr(newTime); // 输出: 2011-08-10 10:08:09
```

参考TDateTime

####### RecodeDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
newTime := RecodeDateTime(strtodatetime("2011-08-10 12:12:12.999"), 2010, 8, 10, 10, 8, 9, 100);
return datetimetostr(newTime); // 输出:  2010-08-10 10:08:09
```

参考TDateTime

####### TryRecodeDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
TryRecodeDateTime(strtodatetime("2011-08-10 12:12:12.999"), 2010, 8, 10, 10, 8, 9, 100, Aresult);
return datetimetostr(Aresult); // 输出: 2010-08-10 10:08:09
```

参考TDateTime

####### CompareDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
result := CompareDateTime(strtodatetime("2011-08-10"), strtodatetime("2011-08-11"));
return result; // 输出:  -1
```

参考TDateTime

####### SameDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
flag := SameDateTime(strtodatetime("2011-08-10"), strtodatetime("2011-08-11"));
return flag; // 输出:  0
```

参考TDateTime

####### CompareDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
result := CompareDate(strtodatetime("2011-08-10"), strtodatetime("2011-08-11"));
return result; // 输出:  -1
```

参考TDateTime

####### SameDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
flag := SameDate(strtodatetime("2011-08-1001:00:00"), strtodatetime("2011-08-1002:00:00"));
return flag; // 输出:  1
```

参考TDateTime

####### CompareTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
result := CompareTime(strtodatetime("2011-08-10 01:00:00"), strtodatetime("2011-08-11 01:00:00"));
return result; // 输出:  0
```

参考TDateTime

####### SameTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
result := SameTime(strtodatetime("2011-08-10 01:00:00"), strtodatetime("2011-08-11 01:00:00"));
return result; // 输出:  1
```

参考TDateTime

####### NthDayOfWeek

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
EndT := strtodatetime("2014-01-06");
weekNum := NthDayOfWeek(EndT);
WOFM := WeekOfTheMonth(EndT);
return array(weekNum, WOFM); // 输出: array(1,2)
```

参考TDateTime

####### DecodeDayOfWeekInMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
EndT := strtodatetime("2011-08-10 12:10:09");
DecodeDayOfWeekInMonth(endt, Ayear, Amonth, ANthDayOfWeek, ADayOfWeek);
return array(Ayear, Amonth, ANthDayOfWeek, ADayOfWeek );
// 输出: array(2011,8,2,3)
```

参考TDateTime

####### EncodeDayOfWeekInMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 2013年10月1日是周二，1日至6日不属于这个月的周，从7日（周一）所属周开始算起
return EncodeDayOfWeekInMonth(2013, 10, 2, 1); // 输出41561（'2013-10-14'）
```

参考TDateTime

####### TryEncodeDayOfWeekInMonth

用途：日期时间相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
TryEncodeDayOfWeekInMonth(2013, 10, 2, 1, newtime);
return datetimetostr(newtime);
// 输出: 2013-10-14
```

参考TDateTime

###### 日期格式的转换

####### 内容

- DateTimeToJulianDate
- JulianDateToDateTime
- TryJulianDateToDateTime
- DateTimeToModifiedJulianDate
- ModifiedJulianDateToDateTime
- TryModifiedJulianDateToDateTime
- DateTimeToUnix
- UnixToDateTime
- FileDateToDateTime
- DateTimeToFileDate
- ExcelRDate

####### DateTimeToJulianDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return DateTimeToJulianDate(strtodatetime('2014-01-01 10:00:00'));
// 输出2456658.91667
```

参考TDateTime JulianDateToDateTime TryJulianDateToDateTime
DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime
TryModifiedJulianDateToDateTime DateTimeToUnix UnixToDateTime

####### JulianDateToDateTime

范例

```tsl
A := JulianDatetoDateTime(2456658.91667);
return DatetimetoStr(A); // 输出2014-01-01 10:00:00
```

参考TDateTime DateTimeToJulianDate TryJulianDateToDateTime
DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime
TryModifiedJulianDateToDateTime DateTimeToUnix UnixToDateTime

####### TryJulianDateToDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
flag := TryJulianDateToDateTime(2456658.91667, T);
if flag then return DatetimetoStr(T);
else return 0;
// 输出2014-01-01 10:00:00
```

参考TDateTime DateTimeToJulianDate JulianDateToDateTime
DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime
TryModifiedJulianDateToDateTime DateTimeToUnix UnixToDateTime

####### DateTimeToModifiedJulianDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
a := DateTimeToModifiedJulianDate(strtodatetime('2014-01-01 10:00:00'));
return a; // 输出56658.41667
```

参考TDateTime DateTimeToJulianDate JulianDateToDateTime TryJulianDateToDateTime
ModifiedJulianDateToDateTime TryModifiedJulianDateToDateTime DateTimeToUnix
UnixToDateTime

####### ModifiedJulianDateToDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
t := ModifiedJulianDateToDateTime(56658.41667);
return datetimetostr(t); // 输出2014-01-01 10:00:00
```

参考TDateTime DateTimeToJulianDate DateTimeToUnix JulianDateToDateTime
TryJulianDateToDateTime UnixToDateTime DateTimeToModifiedJulianDate
TryModifiedJulianDateToDateTime

####### TryModifiedJulianDateToDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
flag := TryModifiedJulianDateToDateTime(56658.41667, t);
if flag then return datetimetostr(t);
else return 0;
// 输出2014-01-01 10:00:00
```

参考TDateTime DateTimeToJulianDate JulianDateToDateTime TryJulianDateToDateTime
DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime DateTimeToUnix
UnixToDateTime

####### DateTimeToUnix

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return DateTimeToUnix(strtodatetime('2014-01-01 10:00:00'));
// 输出1388570400
```

参考TDateTime DateTimeToJulianDate JulianDateToDateTime TryJulianDateToDateTime
DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime
TryModifiedJulianDateToDateTime UnixToDateTime

####### UnixToDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
T := UnixToDateTime(1388570400);
return datetimetostr(T);
// 输出2014-01-01 10:00:00
```

参考TDateTime DateTimeToJulianDate JulianDateToDateTime TryJulianDateToDateTime
DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime
TryModifiedJulianDateToDateTime DateTimeToUnix

####### FileDateToDateTime

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
EndT := FileDateToDateTime(1143033856);
return datetimetostr(EndT);
// 输出：2014-01-01 10:00:00
```

差异说明依赖运行时操作系统相关API，与DateTimeToFileDate相对。

具体差异表现可参考：FAQ：DateTimeToFileDate

####### DateTimeToFileDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
EndT := strtodatetime('2014-01-01 10:00:00');
FileEndT := DateTimeToFileDate(EndT);
return array(EndT, FileEndT);
// 比较两种日期输出
// 输出：array(41640.41667,1143033856)
```

差异说明转化的结果依赖运行时操作系统相关API，转换结果会存在差异，但是同一系统中，转换与转回是自恰的。

即，通过DateTimeToFileDate转换后的结果，再通过FileDateToDateTime转回，可以得到最初未转换之前的值。

如：

```tsl
fdate := DateTimeToFileDate(20240525.1430T);
echo fdate; // windows下返回：1488548800 Linux中返回：1716618600
t := FileDateToDateTime(fdate);
return t; // 都返回20240525.1430T
```

####### ExcelRDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
RDate := 20101231;
return ExcelRDate(RDate);
// 结果：2010-12-31
```

###### 宽字节日期格式转换函数

####### 内容

- DateTimeGMTToCookieStrw
- DateTimeGMTToHttpStrw
- DateTimeToInternetStrw
- Datetimetostrw
- TimetoStrw
- DateToStrw

####### DateTimeGMTToCookieStrw

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return DateTimeGMTToCookieStrw(20200723.110633T);
// 输出Thu, 23-Jul-2020 11:06:33 GMT
```

####### DateTimeGMTToHttpStrw

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return DateTimeGMTToHttpStrw(20200723.110633T);
// 输出Thu, 23 Jul 2020 11:06:33 GMT
```

####### DateTimeToInternetStrw

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return DateTimeToInternetStrw(20200723.110633T, 0);
// 输出Thu, 23 Jul 2020 11:06:33 +0800
```

####### Datetimetostrw

范例

```tsl
return datetimetostrw(20200720.0930T);
// 输出宽字节字符串：2020-07-20 09:30:00
```

####### TimetoStrw

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
return TimetoStrw(9.5 / 24); // 输出宽字节字符串：09:30:00
return TimetoStrw(20200720.0930T); // 输出宽字节字符串：09:30:00
```

####### DateToStrw

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
return datetostrw(20200720T); // 输出宽字节字符串 2020-07-20
```

##### 字符串

###### 内容

- 常用字符串函数
- 判定函数
- 替换以及处理函数
- 字符串数组相关函数
- 重复函数
- 多字节语言支持函数
- 字节函数
- 发音相关函数
- 正则表达式函数
- 正则表达式
- 多语言支持函数
- 文件名以及目录名相关处理函数
- 其它

###### 常用字符串函数

####### 内容

- StrCmp
- Chr
- WideChr
- Str2Array
- Concat
- Array2Str
- Format
- Ord
- SetLength
- CompareText
- Copy
- UpperCase
- LeftBStr
- RightBStr
- MidBStr
- GetFormatLocalCode
- Str
- RightStr
- CompareStr
- LeftStr
- Trim
- SameText
- SetChar
- AppendStr
- GetChar
- LowerCase
- SetFormatLocalCode
- Val
- Pos
- TrimRight
- AnsiFormat
- TrimLeft
- StrToIntDef
- FormatFloat
- StrToCurrDef
- Booltostr2
- StrToFloatDef
- Tostring
- IntToHex
- TryStrToInt
- FloatToStr
- TryStrToFloat
- FormatCurr
- TryStrToCurr
- StrToInt
- BoolToStr
- CurrToStr
- TryStrToBool
- SpaceByNumber
- IsValidIdent
- StrToBool
- StrToFloat
- StrToBoolDef
- IntToStr
- StrToCurr
- AnsiStr2Array
- TryUppercase
- TryLowercase
- SysEncodecryptStr
- Letters
- DecToInt64
- DecToInt64def
- TryDecToInt64
- DecToInt32
- DecToInt32def
- TryDecToInt32
- StrToInt64
- StrToInt64Def
- TryStrToInt64
- StrToInt32
- StrToInt32Def
- TryStrToInt32
- DecToInt
- DecToIntDef
- TryDecToInt

####### StrCmp

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
a := StrCmp("arr", "arry");
return a; //
// 输出；-1
```

差异说明返回值的绝对值大小无实际意义，在不同操作系统中，其绝对值大小也表现不一。

比如，对比字符或ASCII码的比较，在Linux中，返回ASCII码相差的值，Windows中只返回-1，0，1等代表大小，但是符号是一致的。

如strcmp(#97,#100);// Windows返回-1，Linux中返回-3。

####### Chr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
aValue := Chr(50);
return aValue;
// 输出：字符串'2'
```

参考Ord

####### WideChr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
aValue := WideChr(25105);
return aValue;
// 输出：Unicode字符串L'我'
```

参考Ord

####### Str2Array

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
r := Str2Array("SZ000001;SZ000002;SH600000", ";"); // 以分号分隔
return r;
// 输出：array("SZ000001","SZ000002","SH600000")
```

参考Array2Str

####### Concat

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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
```

####### Array2Str

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
var arr := array("thank", "you", "very", "much! ");
a := Array2Str(arr, "-");
return a;
// 输出：thank-you-very-much!
```

参考Str2Array

####### Format

用途：按指定格式输出结果。
参数：

返回：字符串。

范例

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
```

参考SetFormatLocalCode GetFormatLocalCode AnsiFormat

####### Ord

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
r := Ord("2");
return r; // 输出:50
```

参考Chr

####### SetLength

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
// 相当于截取了源串S的前NewLength个字符
S := 'thankyou';
SetLength(S, 5);
return S;
// 输出字符串：thank
```

####### CompareText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return CompareText("SZ000002", "SZ000001"); // 输出:1
return CompareText("SZ000001", "sz000001"); // 输出:0
return CompareText("万科A", "万科Ａ"); // 输出:-65248
```

参考CompareStr

差异说明返回值的绝对值大小无实际意义，仅符号有效。不同操作系统中，返回的绝对值会存在差异，但是在同一个操作系统中，结果是确定的。

如执行：return CompareText("Tinysoft","tsl");

在Windows下返回-1，在Linux中返回：-10

####### Copy

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
a := Copy('thank you', 3, 6);
return a; // 输出字符串：ank yo
```

参考Concat

####### UpperCase

用途：进行大小写转换。
参数：

返回：字符串。

范例

```tsl
return UpperCase("sz000001");
// 输出：SZ000001
```

参考LowerCase

####### LeftBStr

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
arr := LeftBStr("i am a student", 4);
return arr; // 输出字符串：i am
```

####### RightBStr

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
arr := RightBStr("i am a student", 4);
return arr; // 输出:dent
```

####### MidBStr

范例

```tsl
arr := midBStr("i am a student", 6, 6);
return arr; // 输出: a stud
```

####### GetFormatLocalCode

用途：按指定格式输出结果。
参数：无。
返回：字符串。

范例

```tsl
SetFormatLocalCode(0);
return GetFormatLocalCode(); // 输出:0
```

参考SetFormatLocalCode Format AnsiFormat

####### Str

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
Str(114, s);
return s; // 输出:1.14000000000000E+0002
```

参考Val

####### RightStr

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
return RightStr('abccccdddd', 2);
// 结果：’dd’
```

####### CompareStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return CompareStr("万科A", "万科Ａ");
// 输出：-65248
```

参考CompareText

差异说明返回值的绝对值大小无实际意义，仅符号有效。不同操作系统中，返回的绝对值会存在差异，但是在同一个操作系统中，结果是确定的。

如执行：return CompareStr("Tinysoft","tsl");

在Windows下返回-1，在Linux中返回：-2099710

####### LeftStr

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
return LeftStr('abccccdddd', 2);
// 结果：'ab'
```

####### Trim

用途：去除字符串首尾空白字符（空格、换行等）。
参数：s（字符串）。
返回：字符串。

范例

```tsl
return Trim(" Hello! \r\n Tinysoft  ");
```

结果：

```text
Hello!
 Tinysoft
```

参考TrimLeft TrimRight

####### SameText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return SameText("SZ000001", "sz000001"); // 输出: 1
```

####### SetChar

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
var arr := "I am a student";
SetChar(arr, 10, 116);
return arr; // 输出: I am a sttdent
```

####### AppendStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
s := "申万";
AppendStr(s, "采掘");
return s; // 输出：申万采掘
```

####### GetChar

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
arr := GetChar("i am a student", 9);
return arr; // 输出: 116
```

####### LowerCase

用途：进行大小写转换。
参数：

返回：字符串。

范例

```tsl
return LowerCase("万科A");
// 输出: 万科a
```

参考UpperCase

####### SetFormatLocalCode

用途：按指定格式输出结果。
参数：

返回：字符串。

范例

```tsl
SetFormatLocalCode(0);
return GetFormatLocalCode(); // 输出:0
```

参考GetFormatLocalCode Format AnsiFormat

####### Val

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例一：

```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)
```

参考Str

####### Pos

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
a := Pos('a', 'thank you');
return a; // 输出: 3

return Pos('fg', 'adcfgvbhj');
// 结果：4
```

参考Copy Concat

####### TrimRight

用途：去除字符串末尾空白字符。
参数：s（字符串）。
返回：字符串。

范例

```tsl
return TrimRight("Hello! \r\n Tinysoft  ");
```

结果：

```text
Hello!
 Tinysoft
```

参考Trim TrimLeft

####### AnsiFormat

参考GetFormatLocalCode SetFormatLocalCode Format

####### TrimLeft

用途：去除字符串开头空白字符。
参数：s（字符串）。
返回：字符串。

范例

```tsl
return TrimLeft("  Hello! \r\n Tinysoft  ");
```

结果：

```text
Hello!
 Tinysoft
```

参考Trim TrimRight

####### StrToIntDef

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

范例01

```tsl
return StrToIntDef("12", 1); // 输出: 12
return StrToIntDef("test", 1); // 输出: 1
```

范例02：十六进制格式字符串的转换

```tsl
return StrToIntDef("0x12", 1); // 输出：18
// 输出：18
```

参考StrToInt IntToHex StrToBool IntToStr TryStrToInt StrToBoolDef TryStrToBool
BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr
StrToCurrDef TryStrToCurr

####### FormatFloat

用途：按指定格式输出结果。
参数：

返回：字符串。

范例

| 格式串                    | 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       |

```tsl
return FormatFloat('0.000E+00', 23224);
// 输出字符串："2.322E+04"
return FormatFloat('##,###.00', 123);
// 输出字符串："123.00"
return FormatFloat('00,000.00', 123);
// 输出字符串："00,123.00"
```

参考SetFormatLocalCode GetFormatLocalCode

####### StrToCurrDef

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToCurrDef('1321.233', 3);
// 输出:1321.233
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef
TryStrToFloat StrToCurr TryStrToCurr SetFormatLocalCode GetFormatLocalCode

####### Booltostr2

范例

```tsl
return booltostr2(2 > 1); // 返回’ True’
```

####### StrToFloatDef

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToFloatDef('a', 2);
// 输出:2
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat TryStrToFloat StrToCurr
StrToCurrDef TryStrToCurr SetFormatLocalCode GetFormatLocalCode

####### Tostring

####### IntToHex

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return IntToHex(43, 1);
// 输出: 2B(二进制时候为：101011)
```

参考StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef
TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr

####### TryStrToInt

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef StrToBoolDef TryStrToBool
BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr
StrToCurrDef TryStrToCurr

####### FloatToStr

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
return FloatToStr(23.4);
// 输出字符串："23.4"
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat
StrToCurr StrToCurrDef TryStrToCurr SetFormatLocalCode GetFormatLocalCode

####### TryStrToFloat

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
TryStrToFloat('321.23', s);
return s; // 输出：321.23
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef StrToCurr
StrToCurrDef TryStrToCurr SetFormatLocalCode GetFormatLocalCode

####### FormatCurr

用途：按指定格式输出结果。
参数：

返回：字符串。

范例

```tsl
return FormatCurr('0.000E+00', 232.24);
// 输出:2.322E+02
```

参考SetFormatLocalCode GetFormatLocalCode

####### TryStrToCurr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
TryStrToCurr('1321.2333', s);
return s;
// 输出：1321.2333
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef
TryStrToFloat StrToCurr StrToCurrDef SetFormatLocalCode GetFormatLocalCode

####### StrToInt

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

范例一：

```tsl
return StrToInt("12");
// 输出: 12
```

范例二：支持16进制字符串的转换

```tsl
return StrToInt("0xC");
// 输出: 12
```

参考StrToInt IntToHex StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef
TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr

####### BoolToStr

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
return BoolToStr(1 > 2, 0);
// 输出：0
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat
StrToCurr StrToCurrDef TryStrToCurr

####### CurrToStr

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
return CurrToStr(23.24);
// 输出字符串："23.24"
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr StrToFloat StrToFloatDef TryStrToFloat
StrToCurr StrToCurrDef TryStrToCurr SetFormatLocalCode GetFormatLocalCode

####### TryStrToBool

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
TryStrToBool("12", s);
return s; // 输出: 1
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr
StrToCurrDef TryStrToCurr

####### SpaceByNumber

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return write('---', SpaceByNumber(2), '---');
```

运行信息打印结果：

####### IsValidIdent

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
return IsValidIdent('a0ffh2');
// 输出: 1
```

####### StrToBool

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToBool("12"); // 输出: 1
return StrToBool("0"); // 输出: 0
```

参考IntToHex StrToInt IntToStr StrToIntDef TryStrToInt StrToBoolDef TryStrToBool
BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr
StrToCurrDef TryStrToCurr

####### StrToFloat

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToFloat('3434.244');
// 输出实数:3434.24
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloatDef TryStrToFloat
StrToCurr StrToCurrDef TryStrToCurr SetFormatLocalCode GetFormatLocalCode

####### StrToBoolDef

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToBoolDef("12", 3);
// 输出: 1
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt TryStrToBool
BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr
StrToCurrDef TryStrToCurr

####### IntToStr

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
return IntToStr(43);
// 输出："43"
```

参考IntToHex StrToInt StrToBool StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef
TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr

####### StrToCurr

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

```tsl
return StrToCurr('1321.23333');
// 输出实数:1321.2333
```

参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef
TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef
TryStrToFloat StrToCurrDef TryStrToCurr SetFormatLocalCode GetFormatLocalCode

####### AnsiStr2Array

范例

```tsl
r := ansiStr2Array("和顺电气退和顺电气", "退"); // 以中文分隔
return r; // 输出：array("和顺电气","和顺电气")
```

参考str2array

####### TryUppercase

用途：进行大小写转换。
参数：

返回：字符串。

范例

```tsl
return TryUppercase("abc");
// 结果:"ABC"
```

####### TryLowercase

范例

```tsl
return TryUppercase("ABC");
// 结果:"abc"
```

####### SysEncodecryptStr

范例

```tsl
s := "Server=127.0.0.1;Database=tsBase;Uid=TinySoft;Pwd=admin;";
encodeS := sysencodecryptstr(s, 0);
return encodeS;
```

返回字符串：\_ENCODE_3A364432572518291B2C02321C2C0233084C2D59385A3B482D10641755344722194C25417C28412F56056A0C78431364003D5C38553C5269

####### Letters

范例

```tsl
return letters(1, 0);
// 结果：a
```

####### DecToInt64

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例01：

```tsl
return DecToInt64("12"); // 输出: 12L
```

范例02：十六进制格式字符串的转换

```tsl
return DecToInt64("0x12"); // 报错
return StrToInt64("0x12"); // 输出：18L
```

####### DecToInt64def

范例

范例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

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例01

```tsl
return DecToInt32("12"); // 输出: 12
```

范例02：十六进制格式字符串的转换

```tsl
return DecToInt32("0x12"); // 报错
return StrToInt32("0x12"); // 输出：18
```

####### DecToInt32def

范例

范例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

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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
```

####### StrToInt64

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

范例01：

```tsl
return StrToInt64("12"); // 输出: 12L
```

范例02：十六进制格式字符串的转换

```tsl
return StrToInt64("0x12"); // 输出：18L
```

####### StrToInt64Def

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

范例01

```tsl
return StrToInt64Def("12", 1); // 输出: 12L
return StrToInt64Def("test", 1); // 输出: 1L
```

范例02：十六进制格式字符串的转换

```tsl
return StrToInt64Def("0x12", 1); // 输出：18L
```

####### TryStrToInt64

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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
```

####### StrToInt32

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

范例01：

```tsl
return StrToInt32("12"); // 输出: 12
```

范例02：十六进制格式字符串的转换

```tsl
return StrToInt32("0x12"); // 输出：18
```

####### StrToInt32Def

用途：将字符串转换为对应类型。
参数：

返回：转换后的数值或日期。

范例

范例01

```tsl
return StrToInt32Def("12", 1); // 输出: 12
return StrToInt32Def("test", 1); // 输出: 1
```

范例02：十六进制格式字符串的转换

```tsl
return StrToInt32Def("0x12", 1); // 输出：18
```

####### TryStrToInt32

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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
```

####### DecToInt

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例01

```tsl
return DecToInt("12"); // 输出: 12
```

范例02：十六进制格式字符串的转换

```tsl
return DecToInt("0x12"); // 报错
return StrToInt("0x12"); // 输出：18
```

####### DecToIntDef

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例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
```

###### 判定函数

####### 内容

- AnsiContainsText
- AnsiStartsText
- AnsiEndsText
- AnsiMatchText
- AnsiContainsStr
- AnsiStartsStr
- AnsiEndsStr
- AnsiMatchStr
- FormatStrExt

####### AnsiContainsText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
text := 'abcdefg';
return AnsiContainsText(text, 'Abcd');
// 输出：1，包含
```

参考AnsiContainsStr

####### AnsiStartsText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
text := 'abcdefg';
return AnsiStartsText('Abc', text);
// 输出：1
```

参考AnsiStartsStr

差异说明对于空字符串，windows系统中判定为1，Linux中判定为0。其它表现无差别。

如：return AnsiStartsText("","A"); //windows中返回1，而Linux中返回0。

####### AnsiEndsText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
text := 'abcdefg';
return AnsiEndsText('Efg', text);
// 输出:1
```

参考AnsiEndsStr

差异说明对于空字符串，windows系统中判定为1，Linux中判定为0。其它表现无差别。

如：return AnsiEndsText("","A"); //windows中返回1，而Linux中返回0。

####### AnsiMatchText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
AText := 'ABZ';
AValues := array();
AValues[0] := 'abcdefg';
AValues[1] := 'abz';
return AnsiMatchText(AText, AValues);
// 输出：1
// ab不能完全匹配Avalues数组中的值
return AnsiMatchText('ab', AValues);
// 输出：0
```

参考AnsiMatchStr

####### AnsiContainsStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
AText := 'abcdefg';
return AnsiContainsStr(AText, 'Bcd');
// 输出：1
```

参考AnsiContainsText

####### AnsiStartsStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
Atext := 'abcdefg';
return AnsiStartsStr('abcd', Atext);
// 输出：1
```

参考AnsiStartsText

####### AnsiEndsStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
text := 'abcdefg';
return AnsiEndsStr('efg', text);
// 输出:1
```

参考AnsiEndsText

####### AnsiMatchStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
AText := 'ABZ';
AValues := array();
AValues[0] := 'abcdefg';
AValues[1] := 'abz';
return AnsiMatchStr(AText, AValues);
// 输出：0 ，大小写敏感
```

参考AnsiEndsText

####### FormatStrExt

用途：按指定格式输出结果。
参数：

返回：字符串。

范例

```tsl
return FormatStrExt('aaaaa');
// 结果：’aaaaa’

return FormatStrExt(123);
// 结果：’-’
```

###### 替换以及处理函数

####### 内容

- StuffString
- AnsiReplaceText
- AnsiReplaceStr
- ReplaceText
- ReplaceStr
- WrapText
- AdjustLineBreaks
- ReverseString
- SeprateStrToTotal
- TotalStrToSeprate
- DateStrToArr
- RdateStrToArr

####### StuffString

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
Atext := "Here will be instead by \'HERE\'";
ASubText := "HERE";
return StuffString(Atext, 1, 4, ASubText);
// 输出：HERE will be instead by ‘HERE’
```

####### AnsiReplaceText

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
AText := "First will be instead by \'Final\'";
AFromText := "First";
AToText := "FINAL";
return AnsiReplaceText(AText, AFromText, AToText);
// 输出字符串：FINALwill be instead by 'Final'
```

输出：Final will be instead by F参考AnsiReplaceStr

####### AnsiReplaceStr

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
AText := "Big will be replaced by \'BIG\', but big won\'t be replaced by \'BIG\'.";
AFromText := "Big";
AToText := "BIG";
return AnsiReplaceStr(AText, AFromText, AToText);
// 输出：BIG will be replaced by 'BIG', but big won't be replaced by 'BIG'.
```

参考AnsiReplaceText

####### ReplaceText

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
AText := "The first letter will be replaced by \'one\', but the second letter won't.";
AFromText := "letter";
AToText := "one";
return ReplaceText(AText, AFromText, AToText);
// 输出：The first one will be replaced by 'one', but the second one won't.n
```

####### ReplaceStr

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
AText := "The First LETTER in uppercase won\'t be replaced by \'one\', but the Second letter in lowercase will.";
AFromText := "letter";
AToText := "one";
return ReplaceStr(AText, AFromText, AToText);
// 输出：The First LETTER in uppercase won't be replaced by 'one', but the Second one in lowercase will.
```

####### WrapText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
ConstLine := "Separate this sentence to two lines.";
return WrapText(ConstLine, 20);
{输出：
(自动换行时考虑字词的完整性）
Separate this
sentence to two
lines.
}
```

####### AdjustLineBreaks

用途：字符串相关函数。
参数：

返回：字符串。

范例

范例01：调整字符串的换行模式

```tsl
r := AdjustLineBreaks("Tinysoft \r\n Statistical \r\nanalysis Language", 1);
return r;
{输出字符串：
Tinysoft
Statistical
analysis Language
}
```

范例02：数组中的应用-批量操作

```tsl
r := adjustlinebreaks(array("Tinysoft \n Statistical \nanalysis Language", "aa\r\nbb"), 1);
return r;
```

输出结果：字符串中的换行符统一转换成\r\n

####### ReverseString

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ReverseString('abcde1234');
// 返回字符串：4321edcba
```

ho tostn(r);//输出："Tinysoft\n Statistical \nanalysis Language"

####### SeprateStrToTotal

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return SeprateStrToTotal('债券型;现金型;配置型;股票型;保本型');
// 结果：’债券型#现金型#配置型#股票型#保本型’
```

####### TotalStrToSeprate

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return TotalStrToSeprate ('债券型#现金型#配置型#股票型#保本型');
// 结果：’债券型;现金型;配置型;股票型;保本型’
```

####### DateStrToArr

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

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

####### RdateStrToArr

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return RDateStrToArr('20070331;20070630');
```

###### 字符串数组相关函数

####### 内容

- AnsiIndexText
- AnsiIndexStr

####### AnsiIndexText

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
egStr := "ansiIndexText";
strArr := array("Tinysoft", "Statistical", "analysis", "Language", "ansiIndexText");
result := ansiIndexText(egStr, strArr);
return result;
// 4
```

参考AnsiIndexStr

####### AnsiIndexStr

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
// 大小写敏感，没有找到相应的字符串，返回-1
egStr := "ansiIndexstr";
strArr := array("Tinysoft", "Statistical", "analysis", "Language", "ansiIndexStr");
result := ansiIndexStr(egStr, strArr);
return result;
// 输出：-1
```

参考AnsiIndexText

###### 重复函数

####### 内容

- DupeString

####### DupeString

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
S := DupeString('Ha', 5);
return s;
// 输出：表示将S的值变为'HaHaHaHaHa'
```

###### 多字节语言支持函数

####### 内容

- LengthW
- MidStr

####### LengthW

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
testStr := "Tinysoft lengthW:汉字当成一个字符";
return lengthW(testStr);
// 输出：25（包括空格和:）
```

参考LeftStr RightStr MidStr

####### MidStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
testStr := "Tinysoft midStr:支持多字节语言，汉字当成一个字符";
return midStr(testStr, 10, 30);
// 输出字符串：“midStr:支持多字节语言，汉字当成一个字符”
```

参考LeftStr RightStr LengthW

###### 字节函数

字节函数，处理非MBCS的原始字符串，本身存在非B或者ANSI版本。

####### 内容

- ContainsText
- StartsText
- EndsText
- ContainsStr
- StartsStr
- EndsStr
- StuffbString
- ReversebString

####### ContainsText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
a := L'2020Tinysoft 天软';
b := L'tinysoft';
return ContainsText(a, b); // 返回1，包含
```

####### StartsText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
text := 'abcdefg';
return StartsText('Abc', text);
// 输出：1
```

差异说明对于空字符串，windows系统中判定为1，Linux中判定为0。其它表现无差别。

如：return StartsText("","A"); //windows中返回1，而Linux中返回0。

####### EndsText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
text := 'abcdefg';
return EndsText('Efg', text);
// 输出:1
```

差异说明对于空字符串，windows系统中判定为1，Linux中判定为0。其它表现无差别。

如：return EndsText("","A"); //windows中返回1，而Linux中返回0。

####### ContainsStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
a := '2020Tinysoft 天软';
b := 'tinysoft';
c := 'Tinysoft';
return array(ContainsStr(a, b), ContainsStr(a, c));
// 输出：array(0,1)
```

####### StartsStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
Atext := 'abcdefg';
return StartsStr('abcd', Atext);
// 输出：1
```

####### EndsStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
text := 'abcdefg';
return EndsStr('efg', text);
// 输出:1
```

####### StuffbString

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
Atext := "Here will be instead by \'HERE\'";
ASubText := "HERE";
return StuffbString(Atext, 1, 4, ASubText);
// 输出：HERE will be instead by ‘HERE’
```

####### ReversebString

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
a := L'2020Tinysoft 天软'; // 宽字节字符串的表达方式
return ReversebString(a);
// 返回字符串：软天 tfosyniT0202
```

###### 发音相关函数

####### 内容

- SoundEx
- SoundexInt
- DecodeSoundexInt
- SoundexWord
- DecodeSoundexWord
- SoundexSimilar
- SoundexCompare
- SoundexProc
- AnsiResemblesText

####### SoundEx

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
testStr1 := "sun";
s1 := SoundEx(testStr1, 4);
testStr2 := "sum";
s2 := SoundEx(testStr2, 4);
testStr3 := "test";
s3 := SoundEx(testStr3, 4);
return array(s1, s2, s3);
// 输出：array("S500","S500","T230")
```

####### SoundexInt

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
testStr1 := "sun";
s1 := SoundexInt(testStr1, 4);
testStr2 := "sum";
s2 := SoundexInt(testStr2, 4);
testStr3 := "test";
s3 := SoundexInt(testStr3, 4);
return array(s1, s2, s3);
// 输出：array(208597,208597,218929)
```

参考DecodeSoundexInt

####### DecodeSoundexInt

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
testStr := "Tinysoft SoundexInt:返回表示AText的发音的整数";
testStr := DecodeSoundexInt(SoundexInt(testStr, 4));
return testStr;
// T521
```

参考SoundexInt

####### SoundexWord

范例

```tsl
testStr := "Tinysoft SoundexInt:返回表示AText的发音的整数";
testStr := soundexWord(SoundEx(testStr, 4));
return testStr;
// 24206
```

参考DecodeSoundexWord

####### DecodeSoundexWord

范例

```tsl
testStr := "Tinysoft SoundexInt:返回表示AText的发音的整数";
testStr := decodesoundexWord(soundexWord(SoundEx(testStr, 4))); // 24206
return testStr;
// T000
```

参考SoundexWord

####### SoundexSimilar

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return SoundexSimilar("sun", "sum");
// 输出：1
return SoundexSimilar("sun", "fun");
// 输出：0
return SoundexSimilar("return ", "result");
// 输出：0
```

####### SoundexCompare

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return SoundexCompare("sun", "sum");
// 输出：0
return SoundexCompare("sun", "fun");
// 输出：1
return SoundexCompare("result", "return ");
// 输出：-1
```

####### SoundexProc

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return SoundexProc("sun", "sum");
// 输出：1
return SoundexProc("sun", "fun");
// 输出：0
return SoundexProc("transaction", "transact");
// 输出：1
```

####### AnsiResemblesText

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return AnsiResemblesText("sun", "sum");
// 输出：1
return AnsiResemblesText("sun", "fun");
// 输出：0
return AnsiResemblesText("transaction", "transact");
// 输出：1
```

###### 正则表达式函数

####### 内容

- ParseRegExpr
- ParseRegExpr：替换功能
- GetLikeFlag
- SetLikeFlag
- ReplaceStrByReg
- ReplaceTextByReg
- ParseRegExpr3

####### ParseRegExpr

范例

范例01：匹配数字、指定字符串

```tsl
source := "ParseRegExpr 2011 ShenZhenTinysoft (TSL)";
ParseRegExpr("(\\d+).*(Tinysoft)", source, "", result, MPos, Mlen);
return 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, MPos, Mlen);
return 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"[\u4E00-\u9FA5]+"; // 匹配汉字的正则表达式->也是unicode串
ret := ParseRegExpr(reg, source, "", result, MPos, Mlen);
return result;
```

返回结果：array((L"你好"))

范例04：通过控制符"u"设置为非贪婪模式

```tsl
source := "hello tiny tiny tiny tiny tiny";
reg := "hello.*(tiny)";
ret := ParseRegExpr(reg, source, "u", result, MPos, Mlen);
return result;
```

返回：array(("hello tiny","tiny"))

####### ParseRegExpr：替换功能

范例

范例三：求值宏

```tsl
// 求值宏，将数字后的字母替换到数字前
source := "ddd2011a uuuu 2012b zzzz 2013c xxx";
ParseRegExpr("(\\d+)(\\w+)", source, "r", "$2$1", s );
return s;
```

ddda2011 uuuu b2012 zzzz c2013 xxx

范例四：回调函数

```tsl
// 回调函数，替换匹配串第1位+匹配串+匹配串第二位
Source := "ParseRegExpr 2011 ShenZhenTinysoft (TSL)";
ParseRegExpr("(\\d+).*(Tinysoft)", source, "r", function(a) begin return a[1] + a[0] + a[2];end, s);
return s;
```

参考正则表达式

####### GetLikeFlag

范例

```tsl
s := "ParseRegExpr 2011 \r\n ShenZhenTinysoft (TSL)";
reg := "(\\d+).*(tinysoft)";
SetLikeFlag(0b0001 + 0x0010); // 大小写无关+使 '.' 特殊字符匹配任意字符
r := s like reg;
return getlikeflag(); // 获取当前正则控制符状态
// 返回17
```

####### SetLikeFlag

范例

```tsl
s := "ParseRegExpr 2011 \r\n ShenZhenTinysoft (TSL)";
reg := "(\\d+).*(tinysoft)";
SetLikeFlag(0b0001 + 0x0010); // 大小写无关+使 '.' 特殊字符匹配任意字符
return s like reg;
```

返回：1

####### ReplaceStrByReg

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
return ReplaceStrByReg("abcdeak", "A", "kkkk");
// 结果：abcdeak
```

####### ReplaceTextByReg

用途：进行字符串提取或替换处理。
参数：

返回：字符串。

范例

```tsl
return ReplaceTextByReg("abcdeak", "a", "kkkk");
// 结果：kkkkbcdekkkkk
```

####### ParseRegExpr3

用途：解析输入并返回结果。
参数：

返回：字符串。

范例

```tsl
return ParseRegExpr3("abcdeak", "ab", "kkkk", "ir");
// 结果：kkkkcdeak
```

###### 正则表达式

####### 内容

- 什么是正则表达式
- 正则表达式基础
- 正则表达式中的元字符

####### 什么是正则表达式

一个正则表达式，就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用，不过，经过学习之后这些复杂的表达式其实相当简单，而且，一旦弄懂了，你就能把难处理而且容易出错的文本处理工作压缩在几分钟（甚至几秒钟）内完成。正则表达式被各种语言、编辑工具、脚本工具广泛的支持，TSL语言也支持它。

但是，由于正则表达式本身缺少一个规范，因此，各个系统对正则表达式的实现也不同，TSL语言中采用了PERL兼容的正则表达式。

####### 正则表达式基础

正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字，而元字符则具有特殊的含义，我们下面会给予解释。

在最简单的情况下，一个正则表达式看上去就是一个普通的查找串。例如，正则表达式"testing"中没有包含任何元字符，，它可以匹配"testing"和"123testing"等字符串，但是不能匹配"Testing"。

####### 正则表达式中的元字符

要想真正的用好正则表达式，正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。

注：由于TSL语言的字符串常量中\本身就是转义字符，因此，只要牵涉到\的，就要用\\来描述，因而象\s的TSL常量表述则为’\\s’。

| 字符        | 描述                                                                                                                                                                                                                                                                                                                                                                              |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \           | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\' 匹配 "" 而 "\(" 则匹配 "("。                                                                                                                                                                                                            |
| ^           | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。                                                                                                                                                                                                                                                                             |
| $           | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。                                                                                                                                                                                                                                                                              |
| \*          | 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。 *<br>等价于{0,}。                                                                                                                                                                                                                                                                                                 |
| +           | 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。                                                                                                                                                                                                                                                                                 |
|             | 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。                                                                                                                                                                                                                                                                                 |
| {n}         | n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。                                                                                                                                                                                                                                                                           |
| {n,}        | n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o\*'。                                                                                                                                                                                                                               |
| {n,m}       | m 和 n 均为非负整数，其中n <=<br>m。最少匹配 n 次且最多匹配 m 次。如："o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。                                                                                                                                                                                                         |
|             | 当该字符紧跟在任何一个其他限制符 (\*, +, ?, {n}, {n,},<br>{n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。                                                                                                                      |
| .           | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。                                                                                                                                                                                                                                                                                         |
| (pattern)   | 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。要匹配圆括号字符，请使用 '\(' 或 '\)'。                                                                                                                                                                                                                                                                    |
| (?:pattern) | 匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (\|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y\|ies) 就是一个比 'industry\|industries' 更简略的表达式。                                                                                                                                                           |
| (?=pattern) | 正向预查，在任何未来符合匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如， 'Windows<br>(?=95\|98\|NT\|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows<br>3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。 |
| (?!pattern) | 负向预查，在任何不匹配未来符合匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows<br>(?!95\|98\|NT\|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows<br>2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始   |
| x\|y        | 匹配 x 或 y。例如，'z\|food' 能匹配 "z" 或 "food"。'(z\|f)ood' 则匹配 "zood" 或"food"。                                                                                                                                                                                                                                                                                           |
| [xyz]       | 字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。                                                                                                                                                                                                                                                                                                    |
| [^xyz]      | 负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。                                                                                                                                                                                                                                                                                                    |
| [a-z]       | 字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。                                                                                                                                                                                                                                                                                  |
| [^a-z]      | 负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。                                                                                                                                                                                                                                                                     |
| \b          | 匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。                                                                                                                                                                                                                                                              |
| \B          | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。                                                                                                                                                                                                                                                                                                    |
| \cx         | 匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。                                                                                                                                                                                                                                                |
| \d          | 匹配一个数字字符。等价于 [0-9]。                                                                                                                                                                                                                                                                                                                                                  |
| \D          | 匹配一个非数字字符。等价于 [^0-9]。                                                                                                                                                                                                                                                                                                                                               |
| \f          | 匹配一个换页符。等价于 \x0c和 \cL。                                                                                                                                                                                                                                                                                                                                               |
| \n          | 匹配一个换行符。等价于 \x0a和 \cJ。                                                                                                                                                                                                                                                                                                                                               |
| \r          | 匹配一个回车符。等价于 \x0d 和 \cM。                                                                                                                                                                                                                                                                                                                                              |
| \s          | 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。                                                                                                                                                                                                                                                                                                            |
| \S          | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。                                                                                                                                                                                                                                                                                                                                       |
| \t          | 匹配一个制表符。等价于 \x09 和 \cI。                                                                                                                                                                                                                                                                                                                                              |
| \v          | 匹配一个垂直制表符。等价于 \x0b 和 \cK。                                                                                                                                                                                                                                                                                                                                          |
| \w          | 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。                                                                                                                                                                                                                                                                                                                              |
| \W          | 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。                                                                                                                                                                                                                                                                                                                                      |
| \xn         | 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如， '\x41' 匹配 "A"。'\x041' 则等价于 '\x04'<br>& "1"。正则表达式中可以使用ASCII 编码。.                                                                                                                                                                                                                |
| \num        | 匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)' 匹配两个连续的相同字符。                                                                                                                                                                                                                                                                                       |
| \n          | 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。                                                                                                                                                                                                                              |
| \nm         | 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least<br>nm 个获取得子表达式，则 nm 为后向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。                                                                                                   |
| \nml        | 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。                                                                                                                                                                                                                                                                                               |
| \un         | 匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如，\u00A9 匹配版权符号 (?)。                                                                                                                                                                                                                                                                                       |

###### 多语言支持函数

####### 内容

- NextCharIndex
- AnsiToUTF8
- UTF8ToAnsi
- CharToByteIndex
- ByteToCharLen
- AnsiQuotedStr
- AnsiPos
- AnsiDequotedStr
- CharToByteLen
- CharLength
- ByteToCharIndex
- ByteType
- Booltostrw
- UnicodeESC
- unUnicodeESC2
- UnicodeToMultiByte
- FloattoStrw
- UnicodeESC2
- unUnicodeESCw
- UnicodetoUTF8
- CurrtoStrw
- Inttostrw
- MultibyteToUnicode
- Booltostrw2
- Strw
- Inttohexw
- LCMapString
- MultibytetoUnicodew
- UTF8toUnicode
- Exportjsonstring
- unUnicodeESC2w
- unUnicodeESC
- Ifwstring
- MakeLCID
- Importjsonstring
- ExportJsonStringUTF8
- ExportJSONStringMBCS

####### NextCharIndex

范例

```tsl
// ‘软’的开始字节是3，下一个字符是‘T’，‘T’的开始字节位置是5
S := "天软Tinysoft Statistical analysis Language";
return nextCharIndex(s, 3);
// 返回：5
```

####### AnsiToUTF8

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return AnsiToUTF8('2011 tinysoft天软科技');
// 返回字符串：2011 tinysoft澶╄蒋绉戞妧
```

####### UTF8ToAnsi

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return UTF8ToAnsi ('2011 tinysoft澶╄蒋绉戞妧');
// 返回字符串：2011 tinysoft天软科技
```

####### CharToByteIndex

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
// 返回第30字符对应的字节位置
// 其中‘天软’占有4个字节，其余每个字符占1个字节
S := "天软Tinysoft Statistical analysis Language";
return CharToByteIndex(s, 30);
// 返回：32
```

####### ByteToCharLen

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
// 指定最多字节为30后，查找S中30个字节中有多少个字符，
// 其中‘天软’占有4个字节，所以30个字节中，S有28个字符。
S := "天软Tinysoft Statistical analysis Language";
b1 := ByteToCharLen(S, 30);
return b1;
// 返回：28
```

####### AnsiQuotedStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
S := "天软Tinysoft Statistical analysis Language";
return AnsiQuotedStr(s, "'");
// 返回字符串：'天软Tinysoft Statistical analysis Language'
```

####### AnsiPos

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
return AnsiPos("tinysoft", "2011 tinysoft");
// 6
```

####### AnsiDequotedStr

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
S := "'天软Tinysoft Statistical analysis Language'";
return AnsiDequotedStr(s, "'");
// 返回字符串：天软Tinysoft Statistical analysis Language
```

####### CharToByteLen

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
// 在S字符串中取30个字符，统计其所占的字节数。
// 其中‘天软’占有4个字节，其余每个字符占1个字节，由此，30个字符占有32个字节
S := "天软Tinysoft Statistical analysis Language";
b1 := CharToByteLen(S, 30);
return b1;
// 返回：32
```

####### CharLength

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
// 第2个字符‘软’的字节数
S := "天软Tinysoft Statistical analysis Language";
return CharLength(s, 2);
// 返回：2
```

####### ByteToCharIndex

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
// 返回第30字节位置时，是第几个字符位置
// 其中‘天软’占有4个字节，其余每个字符占1个字节
S := "天软Tinysoft Statistical analysis Language";
return ByteToCharIndex(s, 30);
// 返回：28
```

####### ByteType

用途：字符串相关函数。
参数：

返回：字符串。

范例

```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
```

####### Booltostrw

范例

```tsl
return booltostrw(2 > 1);
// 返回宽字节字符串：-1
```

####### UnicodeESC

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return echo UnicodeESC('2011 tinysoft天软科技');
// 返回字符串：2011%20tinysoft%u5929%u8F6F%u79D1%u6280
```

####### unUnicodeESC2

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return unUnicodeESC2(%%g 2011 tinysoft\u5929\u8F6F\u79D1\u6280%%g);
// 返回字符串：2011 tinysoft天软科技
// 注：其中\uxxxx编码方式中的\是一个转义字符，所以需要用非转义字符串%%方式进行表达。
```

####### UnicodeToMultiByte

####### FloattoStrw

范例

```tsl
return floattostrw(1234.1234);
// 输出宽字节字符串：“1234.1234”
```

####### UnicodeESC2

范例

```tsl
return UnicodeESC('2011 tinysoft天软科技');
// 返回字符串：2011 tinysoft\u5929\u8F6F\u79D1\u6280
```

####### unUnicodeESCw

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return unUnicodeESCw('2011%20tinysoft%u5929%u8F6F%u79D1%u6280');
// ’ 2011 tinysoft天软科技’
```

####### UnicodetoUTF8

范例

```tsl
return unicodetoutf8(L'2020 Tinysoft 天软科技');
// 返回：2020 Tinysoft 澶╄蒋绉戞妧
```

####### CurrtoStrw

范例

```tsl
return CurrToStrw(23.24);
// 输出字符串："23.24"
```

####### Inttostrw

范例

```tsl
s := inttostrw(2);
return array(ifstring(s), ifwstring(s));
// 返回：array(0,1) 说明返回结果串s为宽字节串，而非多字节字符串。
```

####### MultibyteToUnicode

####### Booltostrw2

范例

```tsl
return booltostrw2(2 > 1);
// 返回宽字节字符串：True
```

####### Strw

范例

```tsl
v := strw(123.123, s);
return s;
// 返回宽字节字符串：1.23123000000000E+0002
```

####### Inttohexw

范例

```tsl
return inttohexw(43, 5);
// 返回宽字符串字符串：0002B
```

####### LCMapString

范例

lcmapstring(s,0x0804,0x2000000);//可以把繁体转换为简体字符集

```tsl
return lcmapstring("亞洲", 0x0804, 0x2000000);
```

返回:亚洲

差异说明由于根据windowsAPI的开发，所以Linux中不支持。

####### MultibytetoUnicodew

范例

```tsl
return multibytetounicodew('2020 Tinysoft 天软科技', 936);
// 返回宽字节字符串：2020 Tinysoft 天软科技 即L’ 2020 Tinysoft 天软科技’
```

####### UTF8toUnicode

范例

```tsl
return UTF8ToUnicode ('2011 tinysoft澶╄蒋绉戞妧');
// 返回双字节字符串：2011 tinysoft天软科技
```

####### Exportjsonstring

范例

范例01：将天软含中文的字符串转化为json串

```tsl
s := stockname('SZ000002'); // 万 科Ａ
return exportjsonstring(s);
// 返回字符串："\u4E07 \u79D1\uFF21"
```

范例02：将数组转化为json串

```tsl
s := array((1, 'a'), ('Tinysoft天软', '天软科技'));
return exportjsonstring(s);
// 返回字符串：[[1,"a"],["Tinysoft\u5929\u8F6F","\u5929\u8F6F\u79D1\u6280"]]
```

####### unUnicodeESC2w

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return unUnicodeESC2w(%%g 2011 tinysoft\u5929\u8F6F\u79D1\u6280%%g);
// 返回宽字节字符串：2011 tinysoft天软科技
// 注：其中\uxxxx编码方式中的\是一个转义字符，所以需要用非转义字符串%%方式进行表达。
```

####### unUnicodeESC

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return unUnicodeESC('2011%20tinysoft%u5929%u8F6F%u79D1%u6280');
// ’ 2011 tinysoft天软科技'‘
```

####### Ifwstring

范例

范例一：

```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)
```

####### MakeLCID

####### Importjsonstring

范例

范例01：将json串转换成天软字符串

```tsl
json := %%g"\u4E07 \u79D1\uFF21"%%g;
// 注：在上述语句中，原串存在转义字符，需要用到非转义字符串%%表示该字符串，不能用引号进行表示。
return importjsonstring(json);
// 返回字符串：万 科Ａ
```

范例02：将exportjsonstring转化的json串转为天软数据结构

```tsl
s := array((1, 'a'), ('Tinysoft天软', '天软科技'));
json := exportjsonstring(s);
return importjsonstring(json);
// 返回
0
1
1
a
Tinysoft天软
// 天软科技
```

范例03：

```tsl
arr := array(("code":"PFTSDEMO0004", "name":"商品跨期"),
("代码":"PFTSDEMO0003", "name":"债券组合"));
return importJsonString(Utf8toAnsi(exportJsonStringUTF8(arr)));
```

返回

| code         | name     | 代码         |
| ------------ | -------- | ------------ |
| PFTSDEMO0004 | 商品跨期 |              |
|              | 债券组合 | PFTSDEMO0003 |

范例04：将大的无符号数字转为int64

```tsl
json := %%g 4611686018427387904 %%g;
return importjsonstring(json);
```

####### ExportJsonStringUTF8

范例

范例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交互中的应用

pythonCode

```tsl
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 := TSLPy3.RemoteExecute(s, {})
print(data[1].decode('utf8'))
```

python中返回：

[{"StockID":"SZ000002","StockName":"万
科Ａ","date":"2020-09-01","close":27.22},{"StockID":"SZ000002","StockName":"万
科Ａ","date":"2020-09-02","close":27.52}]

####### ExportJSONStringMBCS

用途：将字符串或数组序列化为 JSON 字符串，保留中文原码（MBCS），不转义为 \\uXXXX。
参数：

返回：JSON 字符串。

范例

范例01：将天软含中文的字符串转化为json串

```tsl
s := stockname('SZ000002'); // 万 科Ａ
return ExportJSONStringMBCS(s);
// 返回字符串："\"万 科Ａ\""
```

范例02：将数组转化为json串

```tsl
s := array((1, 'a'), ('Tinysoft天软', '天软科技'));
return ExportJSONStringMBCS(s);
// 返回字符串："[[1,\"a\"],[\"Tinysoft天软\",\"天软科技\"]]"
```

###### 文件名以及目录名相关处理函数

文件相关处理函数包括了对文件名、目录以及扩展名等等相关处理函数，以及文件时间以及和TDatetime之间的转换函数。

####### 内容

- ChangeFileExt
- ExtractFilePath
- ExtractFileDir
- ExtractFileDrive
- ExtractFileName
- ExtractFileExt
- ExtractRelativePath
- IsPathDelimiter
- IsDelimiter
- IncludeTrailingPathDelimiter
- IncludeTrailingBackslash
- ExcludeTrailingPathDelimiter
- ExcludeTrailingBackslash
- LastDelimiter
- AnsiCompareFileName
- SameFileName
- AnsiLowerCaseFileName
- AnsiUpperCaseFileName

####### ChangeFileExt

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
// 实际D盘的test.tsl没有改变
return ChangeFileExt("D:\\test.tsl", ".txt");
// D:\test.txt
```

####### ExtractFilePath

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ExtractFilePath("D:\\Tinysoft\\tslweb\\web\\test.tsl");
// D:\Tinysoft\tslweb\web\
```

####### ExtractFileDir

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ExtractFileDir("D:\\Tinysoft\\tslweb\\web\\test.tsl");
// D:\Tinysoft\tslweb\web
```

差异说明对于路径的处理，在不同系统中存在差异。如Linux中就没有驱动的概念，因此，在处理带驱动的路径时：

如对于根目录的处理extractfiledir("C:\\abc.txt")，Windows中返回”C:\”而Linux中返回”C:”

####### ExtractFileDrive

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ExtractFileDrive("D:\\Tinysoft\\tslweb\\web\\test.tsl");
// 输出：D:
```

####### ExtractFileName

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
return ExtractFileName("D:\\Tinysoft\\tslweb\\web\\test.tsl");
// 输出：test.tsl
```

####### ExtractFileExt

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ExtractFileExt("D:\\Tinysoft\\tslweb\\web\\test.tsl");
// 输出：.tsl
```

####### ExtractRelativePath

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ExtractRelativePath("D:\\test.tsl", "D:\\Tinysoft\\tslweb\\web\\test.tsl");
// 输出：Tinysoft\tslweb\web\test.tsl
```

差异说明由于Linux系统中无盘符概念，所以不支持该功能。

####### IsPathDelimiter

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
return IsPathDelimiter("D:\\Tinysoft\\tslweb\\web\\test.tsl", 3);
// 输出：1
```

####### IsDelimiter

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
return IsDelimiter("tinysoft", "2011 tinysoft", 6);
// 输出：1
```

####### IncludeTrailingPathDelimiter

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return IncludeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web");
// 输出： D:\Tinysoft\tslweb\web\
```

差异说明与路径中存在的路径分割符保持一致，当路径中不存在分割符时，则Windows中默认增加"\"，在Linux中，则默认结路径路径加上”/”结尾。

如在Linux中：return IncludeTrailingPathDelimiter("/Tinysoft");

则返回字符串：/Tinysoft/

####### IncludeTrailingBackslash

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return IncludeTrailingBackslash ("D:\\Tinysoft\\tslweb\\web");
// 输出： D:\Tinysoft\tslweb\web\
```

差异说明与路径中存在的路径分割符保持一致，当路径中不存在分割符时，则Windows中默认增加"\"，在Linux中，则默认结路径路径加上”/”结尾。

如在Linux中：return IncludeTrailingBackslash ("/Tinysoft");

则返回字符串：/Tinysoft/

####### ExcludeTrailingPathDelimiter

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ExcludeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web\\");
// 输出： D:\Tinysoft\tslweb\web
```

####### ExcludeTrailingBackslash

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return ExcludeTrailingBackslash("D:\\Tinysoft\\tslweb\\web\\");
// 输出： D:\Tinysoft\tslweb\web
```

####### LastDelimiter

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return LastDelimiter('\\', "D:\\Tinysoft\\tslweb\\web\\test.tsl");
// 输出：23
```

####### AnsiCompareFileName

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
return AnsiCompareFileName('index.tsl', "test.tsl");
// 输出：-11
```

差异说明返回值的绝对值大小无实际意义，在不同操作系统中，其结果也表现不一。

在Linux中，由于文件名会区分大小写，而Windows中文件名不区分大小写，所以对比结果会有差异。

如：

在Windows中：

return AnsiCompareFileName("D:\\test\\file1.txt","D:\\Test\\File1.txt");

结果为0，因为不区分大小写，两文件名一致。

在Linux中：

return AnsiCompareFileName("/tinysoft/file1.txt","/Tinysoft/File1.txt");

结果为32，因为区分大小写，两文件名不相等。

####### SameFileName

用途：字符串相关函数。
参数：

返回：整数。

范例

```tsl
return SameFileName('index.tsl', "test.tsl");
// 输出：0
```

####### AnsiLowerCaseFileName

用途：进行大小写转换。
参数：

返回：整数。

范例

```tsl
return AnsiLowerCaseFileName("TEST.tsl");
// 输出：test.tsl
```

####### AnsiUpperCaseFileName

用途：进行大小写转换。
参数：

返回：整数。

范例

```tsl
return AnsiUpperCaseFileName("test.tsl");
// 输出：TEST.TSL
```

###### 其它

####### 内容

- GetPYStringList
- HztoPY
- DataUnitConversion

####### GetPYStringList

用途：字符串相关函数。
参数：无。
返回：字符串。

范例

```tsl
sl := GetPYStringList();
return sl.values("明");
// 返回：M
```

####### HztoPY

用途：字符串相关函数。
参数：

返回：字符串。

范例

```tsl
return HztoPY("华夏优势"); // HXYS
return HztoPY("华夏盛势"); // HXCS HXSS
```

####### DataUnitConversion

- GetPYStringList
- HztoPY
- DataUnitConversion

##### 数组

###### 内容

- 基本
- 数组下标以及长度相关函数
- 排序函数
- 增删改查
- 数组操作
- 数组取值
- 集合运算
- 统计函数
- 重构函数
- 稀疏矩阵
- 数据比较
- 表格显示
- 数组下标

###### 基本

####### 内容

- FieldCount
- FieldExist
- FieldNames
- FieldName
- IsTable
- MagicSetArray
- NoRecordTable
- MagicGetArray
- RecordExist
- RecordExist2
- RecordExist3
- FieldNamesOfStrSubscript
- StrSubscriptTableToNormal
- FieldCountOfStrSubscript
- argmax
- Argmin
- PasswordGen

####### FieldCount

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
t1 := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':3));
return FieldCount(t1);
// 结果：2
```

####### FieldExist

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':3));
return FieldExist(t1, 'b');
// 结果：1
```

####### FieldNames

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':3));return FieldNames(t1);
```

####### FieldName

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':3));
return FieldName(t1, 0);
// 结果：’a’
```

####### IsTable

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
t1 := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':3));
return IsTable(t1);
// 结果：1
```

####### MagicSetArray

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

范例01：

```tsl
a := array((1, 2, 3), (4, 5, 6));
MagicsetArray(a, 1, 2, 10); // a[1][2] := 10
return a;
```

范例02：

```tsl
a := array((1, 2, 3), (4, 5, 6));
MagicSetArray(a, array(1, 2), "b"); // a[1][2] := "b"
return a;
```

参考MagicGetArray

####### NoRecordTable

用途：数组相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return NoRecordTable();
// 结果：Array()
```

####### MagicGetArray

范例

范例01：

```tsl
a := array((1, 2, 3), (4, 5, 6));
return MagicgetArray(a, 1, 2); // 返回a[1][2]的数据
```

结果：6

范例02：

```tsl
a := array((1, 2, 3), (4, 5, array(3, 4)));
return MagicgetArray(a, array(1, 2)); // 返回a[1][2]的数据
```

参考MagicSetArray

####### RecordExist

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array(1, 2, 12, 3, 14);
return RecordExist(t, 12);
// 结果：2
```

####### RecordExist2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':3));
return RecordExist2(t1, 'b', 3);
// 结果：2
```

####### RecordExist3

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array(1, 2, 12, 3, 14);
return RecordExist3(t, 3);
// 结果：1
```

####### FieldNamesOfStrSubscript

用途：进行字符串提取或替换处理。
参数：

返回：处理后的结果值。

范例

```tsl
s := `array('a':(1, 2, 3, 4, 5), 'b': (2, 3, 4, 5, 6), 'c': (3, 4, 5, 6, 7), 'd': (4, 5, 6, 7, 8));
return FieldNamesOfStrSubscript(s);
```

返回:

####### StrSubscriptTableToNormal

用途：进行字符串提取或替换处理。
参数：

返回：处理后的结果值。

范例

```tsl
// 把字符串行标变成自然数序列的行标
t := array("a":(1, 2, 3), "b":(4, 5, 6), "c":(7, 8, 9));
return StrSubscriptTableToNormal(t, '序号');
```

把字符串行标

变成自然数序列行标，原行标值放在fn对应的列中:

####### FieldCountOfStrSubscript

用途：进行字符串提取或替换处理。
参数：

返回：整数。

范例

```tsl
s := `array('a':(1, 2, 3, 4, 5), 'b':(2, 3, 4, 5, 6), 'c':(3, 4, 5, 6, 7), 'd':(4, 5, 6, 7, 8));
return FieldCountOfStrSubscript(s);
// 返回：4
```

####### argmax

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
x := array(9, 8, 10);
return argmax(x); // 2
```

####### Argmin

范例

```tsl
x := array(3, 1, 9, 2);
return argmin(x); // 1
```

####### PasswordGen

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
return rdo2 PasswordGen(8, 5, 'ts', 3);
```

返回:

###### 数组下标以及长度相关函数

####### 内容

- GetStrIndexNum
- GetStrIndexs
- GetIntIndexs
- GetAllIndexs
- DeleteIndex
- DeleteField
- Length

####### GetStrIndexNum

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
arr := array("a1":1, "a2":2, 1:3);
return GetStrIndexNum(arr);
// 输出：2
```

####### GetStrIndexs

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
arr := array("a1":1, "a2":2, "a3":3);
return GetStrIndexs(arr);
// 输出：array(“a1”,”a2”,”a3”)。
```

参考GetIntIndexs GetAllIndexs

####### GetIntIndexs

范例

```tsl
arr := array(1:"p1", 2:"p2", 3:"p3", "a4":"p4");
return Getintindexs(arr);
// 输出:array(1,2,3)
```

参考GetStrIndexs GetAllIndexs

####### GetAllIndexs

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
arr := array("p1":1, "p2":2, "p3":3);
return GetAllIndexs(arr); // 输出：array(“p1”,”p2”,”p3”)
```

参考GetStrIndexs GetIntIndexs

####### DeleteIndex

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
arr := array("p1":1, "p2":2, "p3":3);
result := DeleteIndex(arr, "p2", 1);
return result; // true
return arr;
// array(“p1”:1,”p3”:3)
```

参考DeleteField

####### DeleteField

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
arr := array(("p1":1, "p2":2, "p3":3), ("p1":4, "p2":5, "p3":6));
result := DeleteField(arr, "p2", 1);
return arr; // array(("p1":1,"p3":3), ("p1":4"p3":6))
```

参考DeleteIndex

####### Length

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
arr := array(("p1":1, "p2":2, "p3":3), ("p1":4, "p2":5, "p3":6));
return length(arr);
// 2
```

###### 排序函数

####### 内容

- RankIt
- RankIt2
- RPSIt
- SortTableByFieldExt
- RankValue
- SortArray
- SortTableByField
- argsort

####### RankIt

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33));
RankIt(t2, 'c', 1);
return t2;
```

####### RankIt2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33));
RankIt2(t2, 'c', '名次', 1);
return t2;
```

####### RPSIt

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

获得沪深300的成分股，并计算EndT的涨幅，对涨幅排序后返回其排序百分比。

```tsl
Endt := inttodate(20140401);
SetSysParam(PN_Date(), EndT);
stockArr := GetBKByDate('SH000300', EndT);
r := array();
n := 0;
for nI := 0 to length(StockArr) - 1 do
begin
    stockID := StockArr[nI];
    setsysparam(pn_stock(), StockID);
    if not istradeday(EndT) then continue;
    r[n]['StockID'] := StockID;
    r[n]['StockName'] := StockName(StockID);
    r[n]['StockZF'] := stockzf3();
    n++;
end;
return RPSIt(r, 'StockZF', 1);
```

部分结果截图：

####### SortTableByFieldExt

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
s := `array('a':(1, 2, 3, 4, 5), 'b':(-2, -3, -4, 5, 6), 'c':(3, 4, 5, 6, 7), 'd':(4, 5, 6, 7, 8));
return SortTableByFieldExt(s, 'b');
```

返回:

####### RankValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例取上证50的成分股，获得涨幅之后，对涨幅进行排名

```tsl
stockArr := getbkbydate('SH000016', 20190201T);
s := select ['StockID'] as'代码',
["StockName"] as"名称",
['price'] as'收盘',
stockzf(['date'], ['date']) as'涨幅(%)'
from markettable datekey 20190201T to 20190201T of stockArr end;
RankValue(s, '涨幅(%)');
return s;
```

结果:

####### SortArray

范例

```tsl
arr := array(1, 6, 3);
sortArray(arr);
return arr;
// array(1,3,6)
```

参考SortTableByField

####### SortTableByField

范例

```tsl
arr := array(("p1":1, "p2":2, "p3":3),
("p1":4, "p2":5, "p3":6),
("p1":66, "p2":200, "p3":36),
("p1":30, "p2":500, "p3":40));
sortTableByField(arr, "p1", 1);
// sortdi=1按”p1”正序，sortdi=0反序
return arr;
// 结果如图所示
```

参考SortArray

####### argsort

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
value := array(4, 8, 2, 3, 9);
return argsort(value); // 返回：array(2,3,0,1,4)
```

###### 增删改查

####### 内容

- AppendArray
- SeekPosInArray
- StockAmount
- DeleteNILValueByField
- FilterIn
- FilterNotIn
- IN1
- searchsorted
- argconfirst
- DeleteColumnByField
- Inserttablebyrno
- GetValuesByFieldValue
- Arrayextend
- Arrayinsert
- Frameinsert

####### AppendArray

范例

```tsl
a := array(1, 2, 3);
AppendArray(a, 4);
return a;
```

返回:

####### SeekPosInArray

算法

确定查找范围L=0,H=N-1，计算中项J=(L+H)/2。

若arr[mid]=r或L>=H,则结束查找；否则，向下继续。

若arr[mid]<r,说明待查找的元素值只可能在比中项元素大的范围内，则把mid+1的值赋给L，并重新计算mid，转去执行步骤2；若arr[mid]>r，说明待查找的元素值只可能在比中项元素小的范围内，则把mid-1的值赋给H，并重新计算mid，转去执行步骤2。范例

```tsl
return SeekPosInArray(4, array(1, 2, 3, 4, 5));
// 返回：3
```

####### StockAmount

范例

```tsl
// 平安银行2011年6月30日流通A股发生变动
SetSysParam(PN_Stock(), 'SZ000001');
t := InfoArray(16); // 股票.股本结构表
r1 := StockAmount(t, 20110630, 0, '变动日', '流通A股'); // Date当天
r2 := StockAmount(t, 20110630, 1, '变动日', '流通A股'); // Date之前
return array(r1, r2);
```

结果：array(3105358672.0,3105358511.0)

####### DeleteNILValueByField

算法对数组T字段fields的值进行遍历，如果检索到nil值，删除该行数据。范例

```tsl
Tdata := array(array('time':1, 'price':7.78), array('time':2));
DeleteNILValueByField(Tdata, 'price');
return tdata;
```

返回:

####### FilterIn

范例

范例01：

```tsl
// 过滤表a中列’a’的值在array(1,2,5)集中的结果
a := array(
("a":0, "b":0, "c":0),
("a":1, "b":0, "c":2),
("a":2, "b":1, "c":4),
("a":3, "b":1, "c":6),
("a":4, "b":2, "c":8),
("a":5, "b":2, "c":10),
("a":6, "b":3, "c":12));
return filterin(a, array(1, 2, 5), 'a');
```

范例02：

```tsl
// 筛选满足过滤集中整行数据的子集
a := array();
for i := 0 to 15 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
return filterin(a, array(("a":2, "b":1, "c":4), ("a":3, "b":1, "c":4)), nil);
```

范例03：

```tsl
// 筛选满足过滤集中指定列数据的子集
a := array();
for i := 0 to 15 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
return filterin(a, array(("a":2, "b":1), ("a":3, "b":1)), array('a', 'b'));
```

范例04：

```tsl
// 返回符合过滤集中指定列数据的行下标
a := array();
for i := 0 to 15 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
return filterin(a, array(("a":2, "b":1), ("a":3, "b":1)), array('a', 'b'), false);
```

范例05：

一维数组的过滤：

```tsl
return FilterIn(array(1, -5, 10, 2, 10, 14, -5), array(2, 3, 10), nil);
```

返回结果：array(10,2,10)

####### FilterNotIn

范例用法同FilterIn

```tsl
a := array();
for i := 0 to 5 do
begin
    a[i]["a"] := i;
    a[i]["b"] := i div 2;
    a[i]["c"] := i * 2;
end;
b := array(1, 3, 5);
c1 := FilterNotIn(a, b, "a"); // 过滤结果
c2 := FilterNotIn(a, b, "a", false); // 过滤仅返回下标
return array(c1, c2);
```

c1结果：

c2结果：

二维数组中，过滤行运算示例：

```tsl
t := array(
("a":0, "b":0, "c":0),
("a":1, "b":0, "c":2),
("a":2, "b":1, "c":4),
("a":2, "b":1, "c":4),
("a":4, "b":2, "c":8),
("a":4, "b":2, "c":8),
("a":6, "b":3, "c":12));
return filternotin(t, array(("a":2, "b":1, "c":4)), nil);
```

返回结果：过滤后保留重复行。

一维数组的过滤：

```tsl
return FilterNotIn(array(1, -5, 10, 2, 10, 14, -5), array(2, 3, 10), nil);
```

返回结果：array(1,-5,14,-5)

####### IN1

范例

```tsl
a := array(1, 2, 3, 4);
return in1(a, 3);
// 结果：1
```

####### searchsorted

范例

```tsl
// 数字插入
v := array(1, 2, 3, 4, 5, 6);
return searchsorted(v, 3.5); // 返回：3
// 字符串插入
v := array("SH600001", "SH600004", "SH600050", "SH600305");
return searchsorted(v, "SH600049"); // 返回：2
```

####### argconfirst

范例

```tsl
// 实数对比
a := 0 -  > 9;
return argconfirst(a, 3.5, 1); // 返回：4
// 数组对比
a := array(("a", "A"), ("b", "B"), ("c", "C"), ("d", "D"));
v := array("b", "B");
return argconfirst(a, v, 6); // 返回：1
```

####### DeleteColumnByField

范例

```tsl
t1 := array(('a':1, 'b':4, 'c':9), ('a':7, 'b':8, 'c':5));
return DeleteColumnByField(t1, 'a;b');
```

####### Inserttablebyrno

范例

范例1：

```tsl
// 向一维数组指定位置插入一个字符串’aaa’
t := 43456 -  > 43460;
Index := 2;
rData := 'aaa';
return InsertTablebyRno(t, Index, rData);
// 结果：array(43456,43457,"aaa",43458,43459,43460)
```

范例2：

```tsl
// 向一维数组第3行插入多行的数据
t := 44000 -  > 44004;
Index := 3;
rData := array('a', 'b', 'c');
return InsertTablebyRno(t, Index, rData);
// 结果：
array(44000, 44001, 44002, "a", "b", "c", 44003, 44004)
```

范例3：

```tsl
// 向二维数组第3行插入多行的数据
t := array(('a':10, 'b':'i', 'c':datetostr(20200319T)),
('a':50, 'b':'i', 'c':datetostr(20200318T)),
('a':60, 'b':'i', 'c':datetostr(20200317T)),
('a':40, 'b':'o', 'c':datetostr(20200316T)),
('a':20, 'b':'o', 'c':datetostr(20200313T)));
Index := 3;
rData := array(('c':0, 'b':44000, 'a':'2020-03-20'));
return InsertTablebyRno(t, Index, rData);
// 结果：
```

范例4：

```tsl
// 向二维数组第1行插入多行的数据
t := array(('a':10, 'b':'i', 'c':datetostr(20200319T)),
('a':50, 'b':'i', 'c':datetostr(20200318T)),
('a':60, 'b':'i', 'c':datetostr(20200317T)),
('a':40, 'b':'o', 'c':datetostr(20200316T)),
('a':20, 'b':'o', 'c':datetostr(20200313T)));
Index := 1;
rData := array(('c':'2020', 'b':'AAA', 'a':44456),
('c':'2020', 'b':'BBB', 'a':44566));
return InsertTablebyRno(t, Index, rData);
// 结果：
```

####### GetValuesByFieldValue

范例

```tsl
t := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':4));
return GetValuesByFieldValue(t, 'b', 4); // 返’b’列值为4的所有记录
```

####### Arrayextend

范例

```tsl
a := Letters(1 -  > 6);
return arrayextend(a, 2, array('d', 'e'));
```

返回：array("A","B","d","e","C","D","E","F")

####### Arrayinsert

范例

```tsl
a := Letters(1 -  > 6);
return Arrayinsert(a, 2, 3);
```

返回：array("A","B",3,"C","D","E","F")

####### Frameinsert

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
data := load_dataset_iris();
return frameInsert(data, 1, '新列', 0);
```

###### 数组操作

####### 内容

- OutPutTableToCanBeUnderstood
- SeperateTable
- Unitary
- Reverse
- DescartesJoin
- TableVectorizeArray
- DataProcess_MF
- AbnormalData
- QKsplit_Trailing
- QKsplit_Resampling
- WebFormatToRung
- RPSValue
- ZValue
- QKsplit_ToDate
- GroupByFieldValue
- FilterOneDimEx2
- GroupRankIt
- ElementWhere
- Histogram
- FrameGetSubByReg
- Factorize
- GroupPercentrankIt
- SparseMatFill
- ArrayAddGap
- dumies_decode
- GroupTransformByFunc
- Framedrop_duplicates
- Field_ReSortCols
- Framedrop_na
- Framemerge
- Frameqcut
- Frameupdate
- GroupZscoreIt
- get_dummies
- get_dummies2
- framePivot_table
- framecut
- frameMelt
- GroupDemeanIt
- ArrDropDuplicate

####### OutPutTableToCanBeUnderstood

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
return OutPutTableToCanBeUnderstood(array(1, 2, 3));
```

返回:

####### SeperateTable

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

依据字段SepField排序，若字段不存在则返回空数组。

若分割数大于行数，则每行单独生产一个子表；若分割数小于行数，则按int(行数/分割数)去合并表行数，超出部分单作为一个子表。范例

```tsl
t := `array('a':(1, 2, 3, 4), 'b':(2, 3, 4, 5), 'c':(3, 4, 5, 6), 'd':(4, 5, 6, 7), 'e':(5, 6, 7, 8), 'f':(7, 8, 9, 10));
return SeperateTable(t, 'a', 2);
```

返回:

####### Unitary

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := `array('a':(1, 2, 3, 4), 'b':(2, 3, 4, 5), 'c':(3, 4, 5, 6), 'd':(4, 5, 6, 7), 'e':(5, 6, 7, 8), 'f':(7, 8, 9, 10));
Unitary(t, 'b', 0, 10);
return t;
```

返回:

####### Reverse

范例

```tsl
// 倒置数组
setsysparam(pn_stock(), "SZ000002");
setsysparam(pn_date(), 20210601t);
arr := nday(10, "date", datetostr(sp_time()), "close", close());
return reverse(arr);
```

####### DescartesJoin

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
return DescartesJoin(1 -  > 3, 21 -  > 22, 3);
```

####### TableVectorizeArray

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := ones(10, 3);
s := array(1, 2, 3);
return TableVectorizeArray(t, s, '-');
```

####### DataProcess_MF

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

四分位法:上边界=中位数+5.2*medianof(abs(yi-中位数))，下边界=中位数-5.2*medianof(abs(yi-中位数))，其中medianof表示求序列中位数。超出上边界的数改为上边界，低于下边界的数改为下边界。

3倍标准差法:上边界=μ+3σ，下边界=μ-3σ，其中u表示均值，σ表示标准差。超出上边界的数改为上边界，低于下边界的数改为下边界。范例

```tsl
t := `array(array(1, 100, 101, 102, 103, 1000), array(2, 200, 201, 202, 203, 2000));
return DataProcess_MF(t, 'median');
```

返回:

####### AbnormalData

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

中位数法:上边界=中位数+5.2*medianof(abs(yi-中位数))，下边界=中位数-5.2*medianof(abs(yi-中位数))，其中medianof表示求序列中位数。超出上边界的数改为上边界，低于下边界的数改为下边界。

3倍标准差法:上边界=μ+3σ，下边界=μ-3σ，其中u表示均值，σ表示标准差。超出上边界的数改为上边界，低于下边界的数改为下边界。

四分位法:左边界=14位数-1.5*(中位数-14位数)，下边界=34位数+1.5*(34位数-中位数)，。超出右边界的数改为右边界，低于左边界的数改为左边界。

范例

范例01：返回奇异值的位置及处理后的结果。

```tsl
t := array(1, 100, 101, 102, 103, 1000);
AbnormalData(t, "median", r);
return r;
```

返回:

其中，0和5为修改的行，1和1000是对应的原值，93.7和109.3是修改后的值

范例02：对源数据列增加一列奇异值处理后的结果

```tsl
col := 'SH000001';
setsysparam(pn_stock(), col);
setsysparam(pn_date(), 20240930T);
setsysparam(pn_cycle(), cy_day());
days := 100;
// SH000001在20240930最近100天的行情数据中设置三个奇异值
t := Nday(days, '日期', datetostr(sp_time()), col, close());
t[29, col] := 1500;
t[59, col] := 4500;
t[79, col] := 6000;
// 找到数组指定列奇异值，以中位数法为例
tyc := AbnormalData(t[:, col], "median", abn);
t[:, col$"_奇异值处理"] := tyc;
return t;
```

返回结果：增加列"SH000001\_奇异值处理"

####### QKsplit_Trailing

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
return QKsplit_Trailing(20100101T, 20110101T);
```

####### QKsplit_Resampling

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
return QKsplit_Resampling(20100101T, 20110101T, cy_year());
```

####### WebFormatToRung

用途：按指定格式输出结果。
参数：

返回：处理后的结果值。

范例

```tsl
a := array('a':('b':('c':(nil, nan, 3), 'd':2), 'e':nan));
return WebFormatToRung(a); // array("a":("b":("c":("-","-",3),"d":2),"e":"-"))
```

####### RPSValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

指定字段从大到小排序。

RPS=100-100/(数据总数量-1)\*所在行标。范例

```tsl
stockArr := getbkbydate('SH000016', 20190201T);
s := select ['StockID'] as'代码',
["StockName"] as"名称",
['price'] as'收盘',
stockzf(['date'], ['date']) as'涨幅(%)'
from markettable datekey 20190201T to 20190201T of stockArr end;
RPSValue(s, '涨幅(%)');
return s;
```

返回:

####### ZValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

z=(x-μ)/σ;其中z为标准分数；x为某一具体分数，μ为平均数，σ为标准差。范例

```tsl
stockArr := getbkbydate('SH000016', 20190201T);
s := select ['StockID'] as'代码',
["StockName"] as"名称",
['price'] as'收盘',
stockzf(['date'], ['date']) as'涨幅(%)'
from markettable datekey 20190201T to 20190201T of stockArr end;
ZValue(s, '涨幅(%)');
return s
```

返回:

####### QKsplit_ToDate

用途：日期时间处理函数。
参数：

返回：日期或时间值。

范例

```tsl
return QKsplit_ToDate(20220704T);
```

####### GroupByFieldValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

依据字段GroupField值进行排序

划分四个区间，小于等于最小值，最小值到最大值之间的每一个步长区间(包括步长末值)，临近最大值不足一个步长的区间(包括最大值)，大于最大值区间。用FilterTableEx函数来统计指定区间的数量。范例

```tsl
data := select * from tradetable datekey 20180903t to 20180904T of'sz000001'end;
return GroupByFieldValue(data, 'close', 1, 20, 0.1);
```

返回:

####### FilterOneDimEx2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
s := array(1, 2, 3, 4, 5, 6);
return FilterOneDimEx2(s, 4);
// 返回：4
```

####### GroupRankIt

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
T := array(
("G":1, "V1":1, "V2":11, "V3":21),
("G":0, "V1":2, "V2":12, "V3":22),
("G":1, "V1":3, "V2":13, "V3":23),
("G":0, "V1":4, "V2":14, "V3":24),
("G":1, "V1":5, "V2":15, "V3":25),
("G":0, "V1":6, "V2":16, "V3":26));
return GroupRankIt(T, 'G', 'V1'); // array(1,1,2,2,3,3)
```

####### ElementWhere

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
con := array(1, 0, 1, 1, 1, 0);
x := array(1, 2, 3, 4, 5, 6);
y := array(11, 12, 13, 14, 15, 16);
return ElementWhere(con, x, y); // array(1,12,3,4,5,16)
```

####### Histogram

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

范例一：

```tsl
return Histogram(Randn(0, 1, 1000), array(-3, 0.5) -  > 3, '0.00');
```

范例二：

```tsl
data := randn(0, 1, 1000, array('a', 'b'));
return Histogram(data, array(-3, 0.5) -  > 3, '0.00');
```

####### FrameGetSubByReg

范例

```tsl
T := array((13:1, "V1":1, "V2":11, 12:21, 'R1w':1),
(13:0, "V1":2, "V2":12, 12:22, 'R1w':1),
(13:1, "V1":3, "V2":13, 12:23, 'R1w':1),
(13:0, "V1":4, "V2":14, 12:24, 'R1w':1),
(13:1, "V1":5, "V2":15, 12:25, 'R1w':1),
(13:0, "V1":6, "V2":16, 12:26, 'R1w':1));
return frameGetSubByReg(T, '1');
```

array(

(21,1,"V1":1,"R1w":1),

(22,0,"V1":2,"R1w":1),

(23,1,"V1":3,"R1w":1),

(24,0,"V1":4,"R1w":1),

(25,1,"V1":5,"R1w":1),

(26,0,"V1":6,"R1w":1))

####### Factorize

范例

```tsl
value := array('a', 'd', 'c', 'a', 'b');
labels := factorize(value, true, -1, uniques);
echo uniques; // array("a","b","c","d")
return labels; // array(0,3,2,0,1);
```

####### GroupPercentrankIt

用途：进行大小写转换。
参数：

返回：处理后的结果值。

范例

```tsl
T := array(("G":1, "V1":1, "V2":11, "V3":21),
("G":0, "V1":2, "V2":12, "V3":22),
("G":1, "V1":3, "V2":13, "V3":23),
("G":0, "V1":4, "V2":14, "V3":24),
("G":1, "V1":5, "V2":15, "V3":25),
("G":0, "V1":6, "V2":16, "V3":26));
return GroupPercentrankIt(T, 'G', 'V1'); // array(0.0,0.0,0.5,0.5,1.0,1.0)
```

####### SparseMatFill

用途：解析输入并返回结果。
参数：

返回：处理后的结果值。

范例

```tsl
a := array((3:4), ('A':2));
SparseMatFill(a, -1);
return a; // array((3:4,"A":-1),(3:-1,"A":2))
```

####### ArrayAddGap

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
a := array('alpha(%)':3);
ArrayAddGap(a, '风险');
a['beta'] := 3;
return a; // array("alpha(%)":3,"-----风险-----":"----------","beta":3)
```

####### dumies_decode

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
data := array(
("申万房地产":1, "申万有色金属":0, "申万银行":0),
("申万房地产":1, "申万有色金属":0, "申万银行":0),
("申万房地产":0, "申万有色金属":1, "申万银行":0),
("申万房地产":0, "申万有色金属":0, "申万银行":1),
("申万房地产":0, "申万有色金属":1, "申万银行":0));
return dumies_decode(data);
// array("申万房地产","申万房地产","申万有色金属","申万银行","申万有色金属")
```

####### GroupTransformByFunc

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
T := array(("G":1, "V1":1, "V2":11, "V3":21),
("G":0, "V1":2, "V2":12, "V3":22),
("G":1, "V1":3, "V2":13, "V3":23),
("G":0, "V1":4, "V2":14, "V3":24),
("G":1, "V1":5, "V2":15, "V3":25),
("G":0, "V1":6, "V2":16, "V3":26));
fp := function (v, g);
begin
    return rankof([v], [v]);
end;
return GroupTransformByFunc(T, 'G', 'V1', fp); // array(3,3,2,2,1,1)
```

####### Framedrop_duplicates

范例

```tsl
data := load_dataset_iris();
return frameDrop_duplicates(data, 'Species', 'f', '原下标');
```

####### Field_ReSortCols

范例

范例01

```tsl
data := TSUT_Data_ZSZF();
colpriority := array('截止日':-1, "中证500":100);
return field_resortcols(data, colpriority);
```

####### Framedrop_na

范例

```tsl
data := array((nan, 8), (1, 3, 3));
return frameDrop_Na(data, 1, 0);
```

####### Framemerge

范例

范例1：

```tsl
left := `array('a':3 -  > 5, 'b':rand(3));
right := `array('a':1 -  > 4, 'b':rand(4), 'c':rand(4) * 10);
return frameMerge(left, right, 'a');
```

范例2

```tsl
// 多字段merge
left := `array('a':3 -  > 5, 'b':rand(3));
left[:, 'c'] := left[:, 'a'];
right := `array('a':1 -  > 4, 'b':rand(4), 'c':rand(4) * 10);
right[:, 'c'] := right[:, 'a'];
names := array('a', 'c');
return frameMerge(left, right, name, 'lfet', nil, true);
```

范例3

```tsl
// 只更名right
left := `array('a':3 -  > 5, 'b':rand(3));
right := `array('a':1 -  > 4, 'b':rand(4), 'c':rand(4) * 10);
return frameMerge(left, right, 'a', 'full', array(nil, '_x'));
```

####### Frameqcut

- OutPutTableToCanBeUnderstood
- SeperateTable
- Unitary
- Reverse
- DescartesJoin
- TableVectorizeArray
- AbnormalData
- DataProcess_MF
- ZValue
- RPSValue
- FilterOneDimEx2
- GroupByFieldValue
- WebFormatToRung
- QKsplit_Trailing
- QKsplit_ToDate
- QKsplit_Resampling
- Factorize
- dumies_decode
- SparseMatFill
- ElementWhere
- ArrayAddGap
- GroupPercentrankIt
- GroupRankIt
- GroupTransformByFunc
- FrameGetSubByReg
- Histogram
- Framedrop_duplicates
- Field_ReSortCols
- Framedrop_na
- Framemerge
- Frameqcut
- Frameupdate
- GroupZscoreIt
- get_dummies
- get_dummies2
- framePivot_table
- framecut
- frameMelt
- GroupDemeanIt
- ArrDropDuplicate

####### Frameupdate

范例

```tsl
left := `array('a':3 -  > 5, 'b':rand(3));
right := `array('a':1 -  > 4, 'b':rand(4), 'c':rand(4) * 10);
return frameUpdate(left, right, 'a');
```

####### GroupZscoreIt

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
T := array(
("G":1, "V1":1, "V2":11, "V3":21),
("G":0, "V1":2, "V2":12, "V3":22),
("G":1, "V1":3, "V2":13, "V3":23),
("G":0, "V1":4, "V2":14, "V3":24),
("G":1, "V1":5, "V2":15, "V3":25),
("G":0, "V1":6, "V2":16, "V3":26));
return GroupZscoreIt(T, 'G', 'V1');?// array(-1.0,-1.0,0.0,0.0,1.0,1.0)
```

####### get_dummies

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
a := array('a', 'b', 'c', 'a', nan, nil);
t := get_dummies(a, uniques);
echo tostn(uniques); // array(NIL,"a","b","c",NAN)
return t;
```

####### get_dummies2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
b := array("申万房地产", "申万房地产", "申万有色金属", "申万银行", "申万有色金属");
return get_dummies2(b);
```

####### framePivot_table

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 指定条件，首列为申万行业，后续列标为日期，按平均值汇总值为涨幅、振幅的的数据透视表数据
stocks := GetBKByDate("SH000010", 20210525t);
begt := 20210515T;
endt := 20210525T;
t := select ['StockID'] as"代码",
["StockName"] as"名称",
datetostr(['date']) as"日期",
["close"] as"收盘价",
spec(specdate(stockzf3(), ['date']), ['StockID']) as"涨幅",
spec(specdate(stockzdf3(), ['date']), ['StockID']) as"振幅",
spec(base(10029), ['StockID']) as"申万行业"
from markettable datekey begt to endt of stocks end;
index := "申万行业";
colunms := "日期";
vals := array("涨幅", "振幅");
aggfunc := "avg";
return framePivot_table(t, index, colunms, vals, aggfunc);
```

####### framecut

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

范例1：

```tsl
a := array(0, 59, 60, 70, 80, 99, 100);
bins := array(60, 80);
return framecut(a, bins, 0);
// array(0,0,1,1,2,2,2)
```

范例2

```tsl
a := array(0, 59, 60, 70, 80, 99, 100);
bins := 5;
return framecut(a, bins, 0);
// array(0,2,3,3,4,4,4)
```

####### frameMelt

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array(
('截止日':20210101, 'SH000300':1, 'SH000301':3),
('截止日':20210102, 'SH000300':9, 'SH000301':2),
);
ID_names := array('截止日');
return frameMelt(t, '截止日', nil, '代码', '得分');
```

####### GroupDemeanIt

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

范例1：

```tsl
T :=
array(
("G":1, "V1":1, "V2":11, "V3":21),
("G":0, "V1":2, "V2":12, "V3":22),
("G":1, "V1":3, "V2":13, "V3":23),
("G":0, "V1":4, "V2":14, "V3":24),
("G":1, "V1":5, "V2":15, "V3":25),
("G":0, "V1":6, "V2":16, "V3":26));
return GroupDemeanIt(T, 'G', 'V1'); // array(-2.0,-2.0,0.0,0.0,2.0,2.0)
```

范例2

```tsl
T := array(
("G":1, "V1":1, "V2":11, "V3":21),
("G":0, "V1":2, "V2":12, "V3":22),
("G":1, "V1":3, "V2":13, "V3":23),
("G":0, "V1":4, "V2":14, "V3":24),
("G":1, "V1":5, "V2":15, "V3":25),
("G":0, "V1":6, "V2":16, "V3":26));
return GroupDemeanIt(T, 'G', array('V1', 'V2'));
```

####### ArrDropDuplicate

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
data := array(("A":1, "B":NAN), ("A":1, "B":2), ("A":1, "B":NAN), ("A":1, "B":2));
return ArrDropDuplicate(data);
// 结果：array(("A":1,"B":NAN),("A":1,"B":2))
```

###### 数组取值

####### 内容

- ColumnValue
- GetSubTableByField
- GetTopN
- FilterTableEx
- ColumnValue2
- GetBottomN
- FilterOneDimEx
- GetDistinctValue
- GetMiddleN
- FilterTable
- GetSubField
- GetSubTable
- Arraygetdefault
- Arraysetdefault
- Arraysetdefault2
- Randomchoice

####### ColumnValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
s := select ['StockID'] as'代码',
["StockName"] as"名称",
['price'] as'收盘'
from markettable datekey 20190101T to 20190201T of'SZ000001'end;
return ColumnValue(s, '收盘');
```

返回:

####### GetSubTableByField

用途：进行字符串提取或替换处理。
参数：

返回：处理后的结果值。

范例

```tsl
setsysparam(pn_stock(), 'SZ000001');
r := nday(10, 'time', datetostr(sp_time()), 'close', close(), 'open', open(), 'high', high());
return GetSubTableByField(r, 'time;close');
// 功能相当于使用子矩阵取数
return r[:, array('time', 'close')];
```

返回:

####### GetTopN

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':33));
return GettopN(t2, 2);
```

####### FilterTableEx

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33));
return FilterTableEx(t2, 'c', 'IN', 13, 30); // 取13<=[ 'c']<=30
```

####### ColumnValue2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'b':2, 'c':13), ('a':3, 'c':33, 'b':3), ('a':3, 'b':6, 'c':43), ('a':5, 'c':53, 'b':5));
return ColumnValue2(t2, 'a;c');
```

####### GetBottomN

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':33));
return GetBottomN(t2, 2);
```

####### FilterOneDimEx

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array(1, 2, 12, 3.7, 14);
return FilterOneDimEx(t, 'IN', 2, 7);
```

####### GetDistinctValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return GetDistinctValue(t2, 'a');
```

####### GetMiddleN

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':4, 'c':33), ('a':5, 'c':33));
return GetMiddleN(t2, 2, 3);
```

####### FilterTable

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 'SZ002664'在20211231时的分红送股数据
setsysparam(pn_stock(), 'SZ002664');
return FilterTable(Infoarray(18), 20211231);
```

####### GetSubField

用途：进行字符串提取或替换处理。
参数：

返回：处理后的结果值。

范例

```tsl
a := array(('a':8, 'b':7), ('a':6, 'b':9));
return GetSubField(a, 'a'); // 从a表中取第’a列’
```

####### GetSubTable

用途：进行字符串提取或替换处理。
参数：

返回：处理后的结果值。

范例

```tsl
a := array((1, 2, 4), (11, 12, 14));
b := array(0, 2);
return GetSubTable(a, b);
```

####### Arraygetdefault

- ColumnValue
- GetSubTableByField
- FilterTableEx
- GetBottomN
- GetMiddleN
- GetTopN
- FilterOneDimEx
- GetDistinctValue
- ColumnValue2
- FilterTable
- GetSubField
- GetSubTable
- Arraygetdefault
- Arraysetdefault
- Arraysetdefault2
- Randomchoice

####### Arraysetdefault

- ColumnValue
- GetSubTableByField
- FilterTableEx
- GetBottomN
- GetMiddleN
- GetTopN
- FilterOneDimEx
- GetDistinctValue
- ColumnValue2
- FilterTable
- GetSubField
- GetSubTable
- Arraygetdefault
- Arraysetdefault
- Arraysetdefault2
- Randomchoice

####### Arraysetdefault2

- ColumnValue
- GetSubTableByField
- FilterTableEx
- GetBottomN
- GetMiddleN
- GetTopN
- FilterOneDimEx
- GetDistinctValue
- ColumnValue2
- FilterTable
- GetSubField
- GetSubTable
- Arraygetdefault
- Arraysetdefault
- Arraysetdefault2
- Randomchoice

####### Randomchoice

- ColumnValue
- GetSubTableByField
- FilterTableEx
- GetBottomN
- GetMiddleN
- GetTopN
- FilterOneDimEx
- GetDistinctValue
- ColumnValue2
- FilterTable
- GetSubField
- GetSubTable
- Arraygetdefault
- Arraysetdefault
- Arraysetdefault2
- Randomchoice

###### 集合运算

####### 内容

- MergeArray
- FilterIntersectionPart
- FilterIntersectionPart2
- DistinctStr
- IntersectionPart
- QuickIntersectionPart
- Frameconcat

####### MergeArray

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('b':12, 'a':1, 'c':13, 'd':'d'));
t2 := array(('a':2, 'b':22, 'c':23, 'e':'ee'));
t3 := array(('a':2, 'b':22, 'd':23, 'e':'ee'));
return MergeArray(t1, t2, t3); // 将数组t1,t2,t3合并
```

####### FilterIntersectionPart

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':10, 'c':13), ('a':2, 'b':17, 'c':13));
t2 := array(('a':2, 'b':22, 'c':23), ('a':1, 'b':14, 'c':13), ('a':3, 'b':12, 'c':13));
return FilterIntersectionPart(t1, t2, 'a', 'IN'); // t1 与t2的交集
```

####### FilterIntersectionPart2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(1, 2, 3, 4);
t2 := array(3, 4, 5, 6);
return FilterIntersectionPart2(t1, t2, 'IN'); // t1 与t2的交集
```

####### DistinctStr

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
a := array('w', 'd', 'f', 'd', 'e');
return DistinctStr(a); // 保留不相同的，相同的只保留一个
```

####### IntersectionPart

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(1.00, 3.00, 2.00, 9.00, 8.00);
t2 := array(3.00, 0.00, 7.00, 8.00, 1.00, 5.00);
return IntersectionPart(t1, t2);
```

####### QuickIntersectionPart

范例

```tsl
t1 := array(1.00, 3.00, 2.00, 9.00, 8.00);
t2 := array(3.00, 0.00, 7.00, 8.00, 1.00, 5.00);
return IntersectionPart(t1, t2);
```

####### Frameconcat

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
a := ones(3, 3);
b := ones(2, 3);
return frameConCat(array(a, b));
```

###### 统计函数

####### 内容

- GeoMeanByColumn
- SumValueByColumn
- AverageValueByColumn
- PercentValueByField
- MedianByColumn
- VarByColumn
- SumValueByColumn2
- SkewByColumn
- AveDevByColumn
- SumValueByRow2
- MaxValueByColumn
- DevsqByColumn
- KurtByColumn
- SumValueByRow
- HarMeanByColumn
- StatByColumn
- AverageByColumn
- StdevByColumn
- MinValueByColumn
- Describe
- Framecorrel
- Framecov
- Framehhi
- Framelag_zf
- Framepct_change
- Framevaluecounts
- Simpledescribe

####### GeoMeanByColumn

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4, 'c':9), ('a':7, 'b':5, 'c':5));
return GeoMeanByColumn(t1, 'b');
// 结果：4.47
```

####### SumValueByColumn

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4, 'c':9), ('a':7, 'b':8, 'c':5));
return SumValueByColumn(t1, 'b');
// 结果：12
```

####### AverageValueByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return AverageValueByColumn(t2, 'c', 1, 3);
// 结果：43
```

####### PercentValueByField

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return PercentValueByField(t2, 'c', 0.1);
// 结果：19
```

####### MedianByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return MedianByColumn(t2, 'c');
// 结果：38
```

####### VarByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return VarByColumn(t2, 'c');
// 结果：291.67
```

####### SumValueByColumn2

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return SumValueByColumn2(t2, 'c', 1, 2);
// 结果：76
```

####### SkewByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return SkewByColumn(t2, 'c');
// 结果：-0.75
```

####### AveDevByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return AveDevByColumn(t2, 'c');
// 结果：12.5
```

####### SumValueByRow2

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return SumValueByRow2(t2, 1, 0, 1);
// 结果：36
```

####### MaxValueByColumn

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return MaxValueByColumn(t2, 'c');
// 结果：53
```

####### DevsqByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4, 'c':9), ('a':7, 'b':5, 'c':5));
return DevsqByColumn(t1, 'b');
// 结果：0.5
```

####### KurtByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return KurtByColumn(t2, 'c');
// 结果：0.34
```

####### SumValueByRow

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return SumValueByRow(t2, 2);
// 结果：46
```

####### HarMeanByColumn

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4, 'c':9), ('a':7, 'b':5, 'c':5));
return HarMeanByColumn(t1, 'b');
// 结果：4.44
```

####### StatByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
s := `array('a':(1, 2, 3, 4, 5), 'b': (-2, -3, -4, 5, 6), 'c': (3, 4, 5, 6, 7), 'd': (4, 5, 6, 7, 8));
return StatByColumn(s, 'a', 'MAX');
// 返回a列最大值:5
```

####### AverageByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4, 'c':9), ('a':7, 'b':8, 'c':5));
return AverageByColumn(t1, 'b');
// 结果：6
```

####### StdevByColumn

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return StdevByColumn(t2, 'c');
// 结果：17.08
```

####### MinValueByColumn

用途：进行数值统计计算。
参数：

返回：处理后的结果值。

范例

```tsl
t2 := array(('a':2, 'c':13), ('a':3, 'c':33), ('a':3, 'c':43), ('a':5, 'c':53));
return MinValueByColumn(t2, 'c');
// 结果：13
```

####### Describe

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

范例01:

```tsl
load_dataset_iris(data);
return Describe(data);
```

范例02:

```tsl
return Describe(randn(0, 1, 1000), array(0.05, 0.1) -  > 0.95);
```

####### Framecorrel

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
data := TSUT_Data_ZSZF()[:, 1:];
return frameCorrel(data);
```

####### Framecov

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
data := TSUT_Data_ZSZF()[:, 1:];
return frameCov(data);
```

####### Framehhi

- SumValueByColumn
- SumValueByColumn2
- SumValueByRow
- SumValueByRow2
- MaxValueByColumn
- MinValueByColumn
- AverageValueByColumn
- AverageByColumn
- HarMeanByColumn
- GeoMeanByColumn
- DevsqByColumn
- KurtByColumn
- MedianByColumn
- SkewByColumn
- StdevByColumn
- VarByColumn
- AveDevByColumn
- PercentValueByField
- StatByColumn
- Describe
- Framecorrel
- Framecov
- Framehhi
- Framelag_zf
- Framepct_change
- Framevaluecounts
- Simpledescribe

####### Framelag_zf

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array(10, 5, 8, 2);
return frameLag_ZF(t); // array(INF,-50.0,60.0,-75.0)
return frameLag_ZF(t, -1); // array(-50.0,60.0,-75.0,INF)
```

####### Framepct_change

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array(10, 5, 8, 2);
return framePct_change(t); // array(INF,-50.0,60.0,-75.0)
return framePct_change(t, -1); // array(100.0,-37.5,300.0,INF); // 注意此时并不是未来涨幅
```

####### Framevaluecounts

- SumValueByColumn
- SumValueByColumn2
- SumValueByRow
- SumValueByRow2
- MaxValueByColumn
- MinValueByColumn
- AverageValueByColumn
- AverageByColumn
- HarMeanByColumn
- GeoMeanByColumn
- DevsqByColumn
- KurtByColumn
- MedianByColumn
- SkewByColumn
- StdevByColumn
- VarByColumn
- AveDevByColumn
- PercentValueByField
- StatByColumn
- Describe
- Framecorrel
- Framecov
- Framehhi
- Framelag_zf
- Framepct_change
- Framevaluecounts
- Simpledescribe

####### Simpledescribe

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

范例01

```tsl
load_dataset_iris(data);
return SimpleDescribe(data);
```

范例02

```tsl
return SimpleDescribe(randn(0, 1, 1000), array(0.05, 0.1) -  > 0.95);
```

###### 重构函数

####### 内容

- NormalTabletoStrSubscript
- RenameField
- Field_AddSuffix
- RenameFieldByFormat
- Field_AddPrefix
- ReIndex
- ReIndexCopy
- Reshape
- Frame_addprefix
- Frame_addsuffix

####### NormalTabletoStrSubscript

用途：将输入值转换为字符串。
参数：

返回：字符串。

范例

```tsl
s := nday(10, 'time', datetostr(sp_time()), 'close', close());
return NormalTabletoStrSubscript(s, 'time');
```

把 time列的数据变为行标

---变为--》

####### RenameField

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4, 'c':9), ('a':7, 'b':8, 'c':5));
return RenameField(t1, 'a', 'aaa'); // 将t1中的字段’a’改为’aaa’
// 结果：1
```

####### Field_AddSuffix

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 给随机数组批量加后缀
T := rand(10, 10);
Suffix := "@A";
Ifcopy := true;
return Field_AddSuffix(t, Suffix, Ifcopy);
```

####### RenameFieldByFormat

用途：按指定格式输出结果。
参数：

返回：处理后的结果值。

范例

```tsl
// 给随机数组批量加后缀
T := rand(10, 10);
Suffix := '%s'$"@A";
Ifcopy := true;
return RenameFieldByFormat(t, Suffix, Ifcopy);
```

####### Field_AddPrefix

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 给随机数组批量加前缀
T := rand(10, 10);
Suffix := "A";
Ifcopy := true;
return Field_AddPrefix(t, Suffix, Ifcopy);
```

####### ReIndex

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
// 修改数字列名数组为字符串列名数组，即将0,1,2(自增数字）列名重构为"a","b","c"列名的数组
A := rand(10, 3);
s := array("a", "b", "c");
ReIndex(A, nil, s);
return A;

// 修改数字行标数组为字符串行标数组，即将0,1,2(自增数字）行标重构为"a","b","c"行标的数组
A := rand(3, 3);
s := array("a", "b", "c");
ReIndex(A, s);
return A;

// 通过设置行标为nil进行删除该行记录
A := array("A":0, "B":1, "D":2, "E":3);
ReIndex(A, array("A":"A1", "D":nil));
return A;
// 返回：array("A1":0,"B":1,"E":3);

// 如果我们要对多维数组进行处理
A := rand(10, array("A", "B", "D", "E"); // 初始化一个四列的二维矩阵
ReIndex(A, nil, array("A":"A1", "D":nil));
return A;
// 说明，第2个参数为nil表示对第一维的下标不进行变动，因此我们修改列"A"为"A1",并删除"D"列。

// 利用Reindex做列的交换
A := array(1, 2, 3, 4, 5);
reIndex(A, array(0:4, 4:0));
return A;
// 结果为array(5,2,3,4,1);
```

####### ReIndexCopy

参考ReIndex

范例

实现：将指定列下标转为数组的行下标--可用于快速建立哈希表

```tsl
setsysparam(pn_stock(), "SH000001");
setsysparam(pn_date(), 20240822T);
t := nday(10, 'time', datetostr(sp_time()), 'close', close());
return reindexcopy(t, t[:, "time"]);
```

转化结果：

====》转变为：

####### Reshape

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 默认拉伸为一个一维数组
A := Rand(3, 6);
return B := Reshape(A);

// A 是一个4*3的矩阵，拉伸为一个2*6的矩阵
A := array((1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12));
return Reshape(A, 2, 6);
```

####### Frame_addprefix

- RenameField
- ReIndex
- ReIndexCopy
- Reshape
- NormalTabletoStrSubscript
- RenameFieldByFormat
- Field_AddSuffix
- Field_AddPrefix
- Frame_addprefix
- Frame_addsuffix

####### Frame_addsuffix

- RenameField
- ReIndex
- ReIndexCopy
- Reshape
- NormalTabletoStrSubscript
- RenameFieldByFormat
- Field_AddSuffix
- Field_AddPrefix
- Frame_addprefix
- Frame_addsuffix

###### 稀疏矩阵

####### 内容

- Sparse1
- Sparse2
- Speye
- Sprand1
- Sprand2
- Sprandn1
- Sprandn2
- Sprandsym1
- Sprandsym2
- Sparsefull
- Spones
- Spnnz
- Spnonzeros
- Ifsparse
- Spdiags1
- Spdiags2
- Spdiags3
- Spdiags4

####### Sparse1

范例

```tsl
// 将矩阵S由满矩阵格式转化为稀疏格式
S := array((0, 0, 4, 0, 0),
(0, 1, 0, 0, 0),
(0, 0, 0, 0, 0),
(3, 0, 0, 0, 0),
(0, 0, 0, 0, 5));
return sparse1(S);
```

####### Sparse2

范例

```tsl
// 根据i,j,v三元组生成稀疏格式矩阵
i := array(0, 1, 2, 3);
j := array(3, 1, 4, 2);
v := array(5, 3, 2, 4);
return sparse2(i, j, v, 5, 5);
```

####### Speye

范例

```tsl
// 创建m*m稀疏单位矩阵
A := speye(4);
return A;
```

####### Sprand1

范例

```tsl
// 创建与矩阵S相同结构的稀疏均匀随机矩阵
S := array((0, 0, 3, 0, 0),
(0, 0, 0, 0, 0),
(0, 0, 0, 5, 0),
(0, 2, 0, 0, 0),
(0, 0, 0, 0, 4));
return sprand1(S);
```

####### Sprand2

范例

```tsl
// 创建10*10稀疏均匀随机矩阵
A := sprand2(10, 10, 0.3);
return A;
```

####### Sprandn1

范例

```tsl
// 创建与矩阵S相同结构的稀疏正态随机矩阵
S := array((0, 0, 0, 0, 0),
(0, 0, 0, 5, 0),
(3, 0, 0, 0, 0),
(0, 0, 2, 0, 0),
(0, 0, 0, 0, 4));
return sprandn1(S);
```

####### Sprandn2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 创建10*10稀疏正态随机矩阵
A := sprandn2(10, 10, 0.2);
return A;
```

####### Sprandsym1

范例

```tsl
// 创建与矩阵S相同结构的对称稀疏正态随机矩阵
S := array((6, 1, 0, 14, 0),
(0, 7, 0, 0, 15),
(1, 0, 8, 0, 0),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
return sprandsym1(S);
```

####### Sprandsym2

范例

```tsl
// 创建10*10对称稀疏正态随机矩阵
A := sprandnsym2(10, 0.2);
return A;
```

####### Sparsefull

范例

```tsl
// 将S由稀疏格式矩阵转化为5*5满矩阵格式
S := array(0:(0:1), 2:(2:3), 3:(3:4));
return sparsefull(S, 5, 5);
```

####### Spones

范例

```tsl
// 将S中非零元素替换为1
S := array(0:(0:1), 2:(2:3), 3:(3:4));
return spones(S, 1);
```

####### Spnnz

范例

```tsl
// 稀疏正态随机矩阵A中非零元素数目
A := Sprandn2(5, 5, 0.2);
return spnnz(A); // 返回4（随机）
```

####### Spnonzeros

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 提取稀疏正态随机矩阵A中非零元素
A := Sprandn2(5, 5, 0.2);
return Spnonzeros(A);
```

####### Ifsparse

用途：判断条件是否成立。
参数：

返回：布尔值。

范例

```tsl
// 判断矩阵S是否为稀疏矩阵
S := array(3:2, "B":3);
return ifsparse(S); // 返回0
```

####### Spdiags1

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 提取矩阵A中非零对角线
A := array((6, 0, 13, 0, 0),
(0, 7, 0, 14, 0),
(1, 0, 8, 0, 15),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
return spdiags1(A);
```

####### Spdiags2

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 提取矩阵A中第-2,0,2条对角线，按列排列
A := array((6, 0, 13, 0, 0),
(0, 7, 0, 14, 0),
(1, 0, 8, 0, 15),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
d := array(-2, 0, 2);
return spdiags2(A, d);
```

####### Spdiags3

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 将矩阵A中d指定的对角线替换为B中的列
B := array((5, 10, 15),
(4, 9, 14),
(3, 8, 13),
(2, 7, 12),
(1, 6, 11));
d := array(-2, 0, 2);
A := array((6, 0, 13, 0, 0),
(0, 7, 0, 14, 0),
(1, 0, 8, 0, 15),
(0, 2, 0, 9, 0),
(0, 0, 3, 0, 10));
return spdiags3(B, d, A);
```

####### Spdiags4

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 根据对角矩阵B创建稀疏带状矩阵
B := array((5, 10, 15),
(4, 9, 14),
(3, 8, 13),
(2, 7, 12),
(1, 6, 11));
d := array(-2, 0, 2);
m := 5;
n := 5;
return spdiags4(B, d, m, n);
```

###### 数据比较

####### 内容

- TwoRDateCompare_M1
- CompareDataOfDifferentDataProvider

####### TwoRDateCompare_M1

用途：日期时间处理函数。
参数：无。
返回：日期或时间值。

范例

```tsl
// 返回板块申万数字媒体机构持股情况及变化
BkName := "申万数字媒体";
RDate := 20220331;
RDate2 := 20210331;
t1 := Stocks_SharesByOrgan_Call(BkName, RDate, -1, 0);
t2 := Stocks_SharesByOrgan_Call(BkName, RDate2, -1, 0);
return TwoRDateCompare_M1(t1, t2, RDate, RDate2, "代码", 0,
FieldCountOfStrSubscript(t1) - 2, true, false);
```

####### CompareDataOfDifferentDataProvider

- TwoRDateCompare_M1
- CompareDataOfDifferentDataProvider

###### 表格显示

####### 内容

- Pivot
- Pivot_table
- Show3DTable
- Show2DTable
- ShowTableByField
- ShowTableByUnit
- ShowTableByInverse
- QuickRecordExist
- RotateTable
- NonIntersectionPart
- FooterValue
- FooterAverage
- FooterSum
- SetRowDefaultValue
- InverseTable
- GetSubTableByKey
- TableSelect
- TableType
- GetSubTableFreeParam
- ExpandTable

####### Pivot

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 指定条件，行标为日期，列标为名称，值为收盘价、涨幅、振幅的数据透视表
stocks := array("SZ000001", "SZ000002", "SH600050", "SZ300775");
begt := 20210515T;
endt := 20210525T;
t := select ['StockID'] as"代码",
["StockName"] as"名称",
datetostr(['date']) as"日期",
["close"] as"收盘价",
spec(specdate(stockzf3(), ['date']), ['StockID']) as"涨幅",
spec(specdate(stockzdf3(), ['date']), ['StockID']) as"振幅",
spec(base(10029), ['StockID']) as"申万行业"
from markettable datekey begt to endt of stocks end;
index := "日期";
colunms := "名称";
vals := array("收盘价", "涨幅", "振幅");
return Pivot(t, index, colunms, vals);
```

####### Pivot_table

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 指定条件，行标为申万行业，列标为日期，按平均值汇总值为涨幅、振幅的的数据透视表数据
stocks := GetBKByDate("SH000010", 20210525t);
begt := 20210515T;
endt := 20210525T;
t := select ['StockID'] as"代码",
["StockName"] as"名称",
datetostr(['date']) as"日期",
["close"] as"收盘价",
spec(specdate(stockzf3(), ['date']), ['StockID']) as"涨幅",
spec(specdate(stockzdf3(), ['date']), ['StockID']) as"振幅",
spec(base(10029), ['StockID']) as"申万行业"
from markettable datekey begt to endt of stocks end;
index := "申万行业";
colunms := "日期";
vals := array("涨幅", "振幅");
aggfunc := "avg";
return Pivot_table(t, index, colunms, vals, aggfunc);
```

####### Show3DTable

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 生成数据表t
t := array(("代码":"SH600006", "名称":"东风汽车", "2004.10-12@主营业务收入":151953.06, "2004.10-12@主营业务利润":30559.66, "2004.10-12@营业费用":10112.75, "2004.10-12@管理费用":10666.36, "2004.10-12@财务费用":-894.46, "2004.10-12@营业利润":10693.23, "2004.10-12@投资收益":-151.01, "2004.10-12@利润总额":9904.7, "2004.10-12@所得税":2413.81, "2004.10-12@净利润":7873.08, "2004.10-12@货币资金":-11664.28, "2004.10-12@短期投资":-5370.7, "2004.7-9@主营业务收入":167855.56, "2004.7-9@主营业务利润":31127.95, "2004.7-9@营业费用":4452.79, "2004.7-9@管理费用":10541.15, "2004.7-9@财务费用":-1013.26, "2004.7-9@营业利润":17162.48, "2004.7-9@投资收益":150.81, "2004.7-9@利润总额":17246.26, "2004.7-9@所得税":2629.5, "2004.7-9@净利润":14574.03, "2004.7-9@货币资金":532.5, "2004.7-9@短期投资":4962.47), ("代码":"SH600007", "名称":"中国国贸", "2004.10-12@主营业务收入":19715.3, "2004.10-12@主营业务利润":10383.2, "2004.10-12@营业费用":238.4, "2004.10-12@管理费用":1422.7, "2004.10-12@财务费用":1304.4, "2004.10-12@营业利润":7417.7, "2004.10-12@投资收益":81.1, "2004.10-12@利润总额":6404.6, "2004.10-12@所得税":2433.4, "2004.10-12@净利润":3971.2, "2004.10-12@货币资金":2964.5, "2004.10-12@短期投资":0.00, "2004.7-9@主营业务收入":17727.7, "2004.7-9@主营业务利润":9989.1, "2004.7-9@营业费用":165.5, "2004.7-9@管理费用":1151.3, "2004.7-9@财务费用":-18.2, "2004.7-9@营业利润":8690.5, "2004.7-9@投资收益":186.2, "2004.7-9@利润总额":9208.6, "2004.7-9@所得税":2977.1, "2004.7-9@净利润":6231.5, "2004.7-9@货币资金":-8101.2, "2004.7-9@短期投资":0.00), ("代码":"SH600004", "名称":"白云机场", "2004.7-9@主营业务收入":37934.65, "2004.7-9@主营业务利润":15725.54, "2004.7-9@营业费用":2623.82, "2004.7-9@管理费用":4662.1, "2004.7-9@财务费用":1789.5, "2004.7-9@营业利润":6650.11, "2004.7-9@投资收益":-15.38, "2004.7-9@利润总额":6685.16, "2004.7-9@所得税":2350.15, "2004.7-9@净利润":4000.51, "2004.7-9@货币资金":-5054.06, "2004.7-9@短期投资":101.00));
return Show3DTable(t, '名称', '代码', 3);
```

返回:

####### Show2DTable

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 生成数据表t
t := array(("代码":"SH600006", "名称":"东风汽车", "主营业务收入":151953.06, "主营业务利润":30559.66, "营业费用":10112.75, "管理费用":10666.36, "财务费用":-894.46, "营业利润":10693.23, "投资收益":-151.01, "利润总额":9904.7, "所得税":2413.81, "净利润":7873.08, "货币资金":-11664.28, "短期投资":-5370.7, "主营业务收入":167855.56, "主营业务利润":31127.95, "营业费用":4452.79, "管理费用":10541.15, "财务费用":-1013.26, "营业利润":17162.48, "投资收益":150.81, "利润总额":17246.26, "所得税":2629.5, "净利润":14574.03, "货币资金":532.5, "短期投资":4962.47), ("代码":"SH600007", "名称":"中国国贸", "主营业务收入":19715.3, "主营业务利润":10383.2, "营业费用":238.4, "管理费用":1422.7, "财务费用":1304.4, "营业利润":7417.7, "投资收益":81.1, "利润总额":6404.6, "所得税":2433.4, "净利润":3971.2, "货币资金":2964.5, "短期投资":0.00, "主营业务收入":17727.7, "主营业务利润":9989.1, "营业费用":165.5, "管理费用":1151.3, "财务费用":-18.2, "营业利润":8690.5, "投资收益":186.2, "利润总额":9208.6, "所得税":2977.1, "净利润":6231.5, "货币资金":-8101.2, "短期投资":0.00));
return Show2DTable(t, '名称', '代码', 2);
```

返回:

####### ShowTableByField

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
arr := array((1, 2, 3, 4, 5), (2, 3, 4, 5, 6), (3, 4, 5, 6, 7), (4, 5, 6, 7, 8));
return ShowTableByField(arr, array(1, 2, 3));
```

返回:

####### ShowTableByUnit

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := `array('a':(1, 2, 3, 4), 'b':(2, 3, 4, 5), 'c':(3, 4, 5, 6), 'd':(4, 5, 6, 7), 'e':(5, 6, 7, 8), 'f':(7, 8, 9, 10));
return ShowTableByUnit(t, ``array('字段a', 'a', '', ''));
```

返回:

####### ShowTableByInverse

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 生成数据表t
t := array(("代码":"SH600006", "名称":"东风汽车", "主营业务收入":151953.06, "主营业务利润":30559.66, "营业费用":10112.75, "管理费用":10666.36, "财务费用":-894.46, "营业利润":10693.23, "投资收益":-151.01, "利润总额":9904.7, "所得税":2413.81, "净利润":7873.08, "货币资金":-11664.28, "短期投资":-5370.7, "主营业务收入":167855.56, "主营业务利润":31127.95, "营业费用":4452.79, "管理费用":10541.15, "财务费用":-1013.26, "营业利润":17162.48, "投资收益":150.81, "利润总额":17246.26, "所得税":2629.5, "净利润":14574.03, "货币资金":532.5, "短期投资":4962.47), ("代码":"SH600007", "名称":"中国国贸", "主营业务收入":19715.3, "主营业务利润":10383.2, "营业费用":238.4, "管理费用":1422.7, "财务费用":1304.4, "营业利润":7417.7, "投资收益":81.1, "利润总额":6404.6, "所得税":2433.4, "净利润":3971.2, "货币资金":2964.5, "短期投资":0.00, "主营业务收入":17727.7, "主营业务利润":9989.1, "营业费用":165.5, "管理费用":1151.3, "财务费用":-18.2, "营业利润":8690.5, "投资收益":186.2, "利润总额":9208.6, "所得税":2977.1, "净利润":6231.5, "货币资金":-8101.2, "短期投资":0.00));
return ShowTableByInverse(t, '代码', '', 2);
```

返回:

####### QuickRecordExist

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array('a', 'c', 'd');
return QuickRecordExist(t, 'd');
// 结果：2
```

####### RotateTable

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':4));
return RotateTable(t);
```

####### NonIntersectionPart

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t1 := array(('a':1, 'b':4), ('a':7, 'b':8), ('a':2, 'b':3));
t2 := array(('a':1, 'b':1), ('a':7, 'b':8), ('a':5, 'b':5));
return NonIntersectionPart(t1, t2, 'b');
```

####### FooterValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

对起始序号Fromcol、截止序号ToCol限定大小为0到数组t的字段个数，如果Fromcol>ToCol，则将Fromcol与ToCol互换

若type值为0，则计算各列平均值，如果type为1，则对列求和。

AverageColField可以为t数组中列名，如果列名刚好为对应字符串“平均”或“总计”，那么，除AverageColField列外，其他数据按type类型计算，统计数据 存储在最后一行，AverageColField列下对应为“平均”或“总计”字符串。

如果AverageColField为空或指定的列名不为“平均”或“总计”，那么，“平均”或“总计”字符串存放在第一列最后一行，其他列的统计结果存放在最后一行。范例

```tsl
s := array(array(1, 2, 3, 4, 5),
array(2, 3, 4, 5, 6),
array(3, 4, 5, 6, 7));
return FooterValue(s, 1, 3, '', 1);
```

返回:

####### FooterAverage

用途：数组相关函数。
参数：

返回：处理后的结果值。

算法

1、对起始序号Fromcol、截止序号ToCol限定大小为0到数组t的字段个数，

如果Fromcol>ToCol，则将Fromcol与ToCol互换。

2、计算各列平均值

3、AverageColField可以为t数组中列名，如果列名刚好为对应字符串“平均”，那么，除AverageColField列外，其他列计算平均值，平均值存储在最后一行，AverageColField列最后一行值为“平均”。

如果AverageColField为空或指定的列名不为“平均”，那么，“平均”字符串存放在第一列最后一行，其他列的统计结果存放在对应列最后一行。范例

```tsl
s := array(array(1, 2, 3, 4, 5),
array(2, 3, 4, 5, 6),
array(3, 4, 5, 6, 7));
return FooterAverage(s, 1, 3, '');
```

返回:

####### FooterSum

算法

1、对起始序号Fromcol、截止序号ToCol限定大小为0到数组t的字段个数，

如果Fromcol>ToCol，则将Fromcol与ToCol互换。

2、计算各列和

3、AverageColField可以为t数组中列名，如果列名刚好为对应字符串“总计”，那么，除AverageColField列外，其他列数据求和，统计值存储在最后一行，AverageColField列最后一行值为“总计”。

如果AverageColField为空或指定的列名不为“总计”，那么，“总计”字符串存放在第一列最后一行，其他列的统计结果存放在对应列最后一行。范例

```tsl
s := array(array(1, 2, 3, 4, 5),
array(2, 3, 4, 5, 6),
array(3, 4, 5, 6, 7));
return FooterAverage(s, 1, 3, '');
```

返回:

####### SetRowDefaultValue

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
s := array(array(1, 2, 3, 4, 5),
array(2, 3, 4, 5, 6),
array(3, 4, 5, 6));
SetRowDefaultValue(s, 2, 'wo');
return s;
```

返回:

####### InverseTable

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
s := array(array('A':'a', 'B':'b', 'C':'c', 'D':'d', 'e':'e'),
array('A':2, 'B':3, 'C':4, 'D':5, 'e':6),
array('A':3, 'B':4, 'C':5, 'D':6, 'e':7), );
return InverseTable(s);
```

返回:

####### GetSubTableByKey

用途：进行字符串提取或替换处理。
参数：

返回：处理后的结果值。

范例

```tsl
s := array(array('A':'a', 'B':'b', 'C':'c', 'D':'d', 'e':'e'),
array('A':'c', 'B':3, 'C':4, 'D':5, 'e':6),
array('A':3, 'B':4, 'C':5, 'D':6, 'e':7));
return GetSubTableByKey(s, 'A', 'a;c');
```

返回:

####### TableSelect

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
t := `array('a':(1, 2, 3, 4), 'b':(2, 3, 4, 5), 'c':(3, 4, 5, 6), 'd':(4, 5, 6, 7), 'e':(5, 6, 7, 8), 'f':(7, 8, 9, 10));
return TableSelect(t, "~['b']=2", '~'); // 返回t中字段’b’=2的子表
```

返回:

####### TableType

范例

```tsl
s := array(array(1, 2, 3, 4, 5),
array(2, 3, 4, 5, 6),
array(3, 4, 5, 6, 7));
return tabletype(s);
// 返回：0
```

####### GetSubTableFreeParam

用途：进行字符串提取或替换处理。
参数：

返回：处理后的结果值。

范例

```tsl
return GetSubTableFreeParam(); // 之前在系统参数中已经设置好第一个参数s=array(array('s':1,'w':2,'sl':3), array('s':2,'w':3,'sl':4), array('s':3,'w':4,'sl':5)),第二三个参数’s’,’w’。
```

返回:

####### ExpandTable

用途：数组相关函数。
参数：

返回：处理后的结果值。

范例

```tsl
// 按照分红送股列展开数据
data := Query("", "SH600000;SZ000002", true, "", "代码", DefaultStockID(), "名称",
CurrentStockName(), "分红送股", infoarray(18));
return ExpandTable(data, "分红送股");
```

###### 数组下标

####### 内容

- frameIndex_filter
- frameIndex_getilocDZ

####### frameIndex_filter

用途：数组相关函数。
参数：

返回：整数。

范例

范例01

```tsl
// 选择 "回测周期":"因子分类"
allcols :=
array("回测名称", "回测周期", "分组个数", "因子名称", "因子分类", "IC分析@IC均值", "IC分析@ICIR", "IC分析@IC胜率(%)", "回归分析@平均收益(%)", "回归分析@T值", "分组绝对收益（多头）@收益(%)", "分组绝对收益（多头）@波动率(%)", "分组绝对收益（多头）@胜率(%)", "分组相对收益（多头）@收益(%)", "分组相对收益（多头）@波动率(%)", "分组相对收益（多头）@胜率(%)", "分组相对收益（多头）@T值", "分组多空收益@收益(%)", "分组多空收益@波动率(%)", "分组多空收益@胜率(%)", "分组多空收益@T值", "创建人", "因子回测ID", "收藏人数", "是否已收藏");
return frameIndex_filter(allcols, array('回测周期', '因子分类'), 1);
```

范例02

```tsl
// 选择 IC分析 开头的
return frameIndex_filter(allcols, '^IC分析', 3);
```

范例03

```tsl
// 选择 IC分析 开头，或者 因子 开头的
return frameIndex_filter(allcols, array('^IC分析', '^因子'), 3);
```

####### frameIndex_getilocDZ

用途：数组相关函数。
参数：

返回：整数。

范例

```tsl
return frameIndex_getilocDZ(array('成长', '估值', '动量'));
```
