171 KiB
基础函数
内容
- 数字
- 日期时间
- 字符串
- 数组
数字
内容
- FloatN
- FloatToStrEx
- FormatFloatExt
- WebZero
- RoundTo5
- SimpleRoundTo2
- DivValue
- Dataisequal
FloatN
范例
Return FloatN(12.6578,2);
//结果:12.66
FloatToStrEx
范例
Return FloatToStrEx (12.6578,2);
//结果:’ 12.66’
FormatFloatExt
范例
Return FormatFloatExt(12345.67,1);
//结果:’ 12,345.67’
Return FormatFloatExt("123");
//结果:’ -’
WebZero
范例
return WebZero(0);
//结果:’’ //空字串
RoundTo5
范例
return RoundTo5(0.35);
//结果:0.5
SimpleRoundTo2
范例
范例01:
Return SimpleRoundTo2(1234.56789654,-2);
//结果:1234.57
范例02:
Return SimpleRoundTo2(-1234.5658965,-2);
//结果:-1234.56
DivValue
算法如果v2不为0,则返回v1/v2,否则返回0。范例
return DivValue(8,2);
//返回:4
Dataisequal
日期时间
内容
- 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
范例
Return Time();//输出0.59
参考TDateTime
####### DecodeTime
范例
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
范例
dow:=DayOfWeek(EncodeDate(2011,8,8));
return dow;//输出:2
参考TDateTime
####### EncodeTime
范例
Time1:=EncodeTime(12,35,35,100);
return time1;//输出:0.52471(12:35:35.1)
参考TDateTime EncodeDate TryEncodeDate TryEncodeTime DecodeTime DecodeDate DecodeDateFully
####### Now
范例
Return Now();//输出40763.59
参考TDateTime
####### DecodeDate
范例
DecodeDate(inttodate(20140115),year,month,day);
return array(year,month,day );
//输出array(2014,1,15)
参考TDateTime EncodeDate DecodeTime DecodeDateFully EncodeTime TryEncodeDate TryEncodeTime
####### Date
范例
//当前的日期
Return Date();//输出41656
参考TDateTime
####### TryEncodeDate
范例
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
范例
if TryEncodeTime(12,20,30,200,time) then
return time //输出:0.51
else
return "eccode error ";
参考TDateTime EncodeDate DecodeTime DecodeDate DecodeDateFully EncodeTime TryEncodeDate
####### DecodeDateFully
范例
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
范例
date:=EncodeDate(2011,8,6);
return date;//输出:40761
参考TDateTime EncodeTime TryEncodeDate TryEncodeTime DecodeDate DecodeDateFully DecodeTime
####### TryStrToDate
范例
If TryStrToDate("2010-02-04 ",date) then
Return date;//输出40213
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### StrToDateTimeDef
范例
Return StrToDateTimeDef("2011-08-08 16:61:16 ",now());//输出当前系统日期时间
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### DateTimeToInternetStr
范例
EndT:=strtodatetime('2014-01-01 10:00:00');
datetime:=DateTimeToInternetStr(EndT,0);
Return datetime ;//输出Wed, 1 Jan 2014 10:00:00 +0800
####### IncAMonth
范例
year:=2011;
month:=8;
day:=8;
IncAmonth(year,month,day,4);
Return EncodeDate(year,month,day);//输出40885
####### StrToTime
范例
Return StrToTime("15:20:34");//输出0.64
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### CurrentYear
范例
Return CurrentYear();//输出2011
####### TryStrToTime
范例
If TryStrToTime("15:52:35",time) then
Return time;//输出0.66
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### StrToDate
范例
Return StrToDate("2010-02-04");//输出40213
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### DateTimeGMTToHttpStr
范例
EndT:=strtodatetime('2014-01-01 10:00:00');
datetime:=DateTimeGMTToHttpStr(EndT);
Return datetime; //输出:Wed, 01 Jan 2014 10:00:00 GMT
####### DateToStr
范例
EndT:=inttodate(20140117);
Return DateToStr(EndT); //输出 2014-01-17
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### StrToTimeDef
范例
time:=StrToTimeDef("15:61:34 ",time());
Return time; //输出当前系统时间
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### DateTimeToStr
范例
EndT:=now();
Return DateTimeToStr(EndT);//输出当前系统日期时间
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### DateTimeToString
范例
DateTimeToString(result,'YYYY-MM-DD HH:NN:SS',now()) ;
Return result;//输出当期系统日期时间
参考TDateTime SetFormatLocalCode GetFormatLocalCode
差异说明在不同操作系统中,返回的日期格式会有所差异,差异同FormaTDateTime,FAQ:FormatDateTime
####### Strtodatetime2
范例
// 字符串2021-8-12 10:31:24:199 转换为日期时间格式(包含毫秒)
s:="2021-8-12 10:31:24:199"
return StrToDateTime2(s); //结果:44420.4384745255
####### FormatDateTime
范例
Return FormatDateTime("C",now());//输出2011-08-08 16:27:08
Return FormatDateTime("Dddddd",now());//输出2011年8月8日
参考SetFormatLocalCode GetFormatLocalCode
差异说明其转换结果依赖运行环境的操作系统的日期时间格式,如表示星期时,有些操作系统上表示方式为“周五”,而有些操作系统上表示为“五”。
####### DateTimeGMTToCookieStr
范例
EndT:=strtodatetime('2014-01-01 10:00:00');
datetime:=DateTimeGMTToCookieStr(EndT);
Return datetime; //输出Wed, 01-Jan-2014 10:00:00 GMT
####### StrToDateTime
范例
Return StrToDateTime("2011-08-08 16:00:16 ");//输出40763.67
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### IsLeapYear
范例
Return IsLeapYear(2000);//输出1
Return IsLeapYear(2011);//输出0
参考IsInLeapYear
####### GMTToLocalDateTime
范例
GMT:="Wed, 01 Jan 2014 10:00:00 GMT ";
datetime:=GMTToLocalDateTime(GMT);
Return datetime;//输出:41640.75 (时间为2014-01-01 18:00:00)
####### TimeToStr
范例
//输入时间或者日期时间
Return timeToStr(0.5);
return timetostr(now());
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### StrToDateDef
范例
Return StrToDateDef("2010-02-30",date());//转换失败输出当前日期40763
参考TDateTime SetFormatLocalCode GetFormatLocalCode
####### TryStrToDateTime
范例
If TryStrToDateTime("2010-02-04 16:11:35 ",datetime) then
Return datetime;//输出40213.67
参考TDateTime SetFormatLocalCode GetFormatLocalCode
简单转换函数
####### 内容
- DateToInt
- IntToDate
- StrToDateExt
- ExcelIntToDate
- ExcelDateToInt
- FormatStrToDateTime2
####### DateToInt
范例
DateTime:=40559;
Return DateToInt(DateTime);
//结果:20110116
####### IntToDate
范例
Rdate:=20110116;
Return IntToDate(Rdate);
//结果: 40559
####### StrToDateExt
范例
S:='16/1/2011';
StrFormat:=0;
Return StrToDateExt(S, StrFormat);
//结果:40559
####### ExcelIntToDate
范例
//报告期为2010年年报
RDate:=20101231;
Return ExcelIntToDate(RDate);
//结果:40543
####### ExcelDateToInt
范例
RDate:=20101231;
Return ExcelDateToInt(RDate);
//结果:20101231
####### FormatStrToDateTime2
范例
// 字符串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
范例
If IsInLeapYear(date) then
Return "this year is a leap year "
Else
Return "this year is not a leap year ";
参考TDateTime IsLeapYear
####### IsPM
范例
If IsPM(Time()) then
Return "is PM "
Else
Return "is AM ";
参考TDateTime
####### IsValidDate
范例
If IsValidDate(2011,8,34) then
Return "right "
Else
Return "wrong ";
//输出 wrong
参考IsValidTime IsValidDateTime IsValidDateDay IsValidDateWeek IsValidDateMonthWeek
####### IsValidTime
范例
If IsValidTime(17,48,45,678) then
Return "right time "
Else
Return "wrong time "; //输出 right time
参考IsValidDate IsValidDateTime IsValidDateDay IsValidDateWeek IsValidDateMonthWeek
####### IsValidDateTime
范例
If IsValidDateTime(2011,8,8,17,57,56,245) then
Return "right "
Else
Return "wrong ";
//输出 right
参考IsValidDate IsValidTime IsValidDateDay IsValidDateWeek IsValidDateMonthWeek
####### IsValidDateDay
范例
If IsValidDateDay(2010,345) then
Return "valid "
Else Return "not valid ";
//输出 valid
参考IsValidDate IsValidTime IsValidDateTime IsValidDateWeek IsValidDateMonthWeek
####### IsValidDateWeek
范例
If IsValidDateWeek (2010,15,4) then
Return "valid "
Else Return "not valid ";
//输出 valid
参考IsValidDate IsValidTime IsValidDateTime IsValidDateDay IsValidDateMonthWeek
####### IsValidDateMonthWeek
范例
If IsValidDateMonthWeek(2000,10,2,3) then
Return "valid "
Else Return "not valid ";
//输出 valid参考IsValidDate IsValidTime IsValidDateTime IsValidDateDay IsValidDateWeek
####### WeeksInYear
范例
num:= WeeksInYear (Date());
Return num;//输出52
参考TDateTime WeeksInAYear DaysInYear DaysInAYear DaysInMonth DaysInAMonth
####### WeeksInAYear
范例
num:= WeeksInAYear (2010);
Return num;//输出52
参考WeeksInYear DaysInYear DaysInAYear DaysInMonth DaysInAMonth
####### DaysInYear
范例
days:= DaysInYear (Date());
Return days;//输出365
参考TDateTime WeeksInYear WeeksInAYear DaysInAYear DaysInMonth DaysInAMonth
####### DaysInAYear
范例
days:= DaysInAYear (2010);
Return days;//输出365
参考WeeksInYear WeeksInAYear DaysInYear DaysInMonth DaysInAMonth
####### DaysInMonth
范例
days:= DaysInMonth (inttodate(20131201));
Return days;//输出31
参考TDateTime WeeksInYear WeeksInAYear DaysInYear DaysInAYear DaysInAMonth
####### DaysInAMonth
范例
days:= DaysInAMonth (2010,2);
Return days;//输出28
参考WeeksInYear WeeksInAYear DaysInYear DaysInAYear DaysInMonth
####### Today
范例
datetime:=Today();
Return DateToStr(datetime);//输出2011-08-08
参考TDateTime Yesterday Tomorrow
####### Yesterday
范例
Datetime:=Yesterday();
Return DateToStr(datetime);//输出2011-08-07
参考TDateTime Today Tomorrow
####### Tomorrow
范例
Datetime:=Tomorrow();
Return DateToStr(datetime);//输出2011-08-09
参考TDateTime Today Yesterday
####### IsToday
范例
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
范例
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
范例
return DateOf(now()); //返回今天的日期
参考TDateTime TimeOf DecodeDate
####### TimeOf
范例
return TimeOf (now()); //返回当前所处的时间点
//截取某个日期时间的时间点
EndT:=strtodatetime("2014-01-17 10:00:00");
return TimeOf(EndT); //返回0.4167
参考TDateTime DecodeTime DateOf
####### YearOf
范例
year:=Yearof(strToDate('2010-08-08'));
return year;
//输出: 2010
参考TDateTime DecodeDate MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
####### MonthOf
范例
month:=Monthof(strToDate('2010-08-08'));
return month;//输出: 8
参考TDateTime DecodeDate YearOf DayOf HourOf MinuteOf SecondOf MilliSecondOf
####### DayOf
范例
hour:=dayof(strtodatetime('2011-08-08 11:22:06'));
return hour; //输出: 8
参考TDateTime DecodeDate YearOf MonthOf HourOf MinuteOf SecondOf MilliSecondOf
####### HourOf
范例
hour:=hourof(strtodatetime('2011-08-08 11:22:06'));
return hour; //输出: 11
参考TDateTime DecodeDate YearOf MonthOf DayOf MinuteOf SecondOf MilliSecondOf
####### MinuteOf
范例
minute:=minuteof(strtodatetime('2011-08-08 11:22:06'));
return minute;//输出: 22
参考TDateTime DecodeDate YearOf MonthOf DayOf HourOf SecondOf MilliSecondOf
####### SecondOf
范例
second:=secondof(strtodatetime('2011-08-08 11:22:06'));
return second;//输出: 6
参考TDateTime DecodeDate YearOf MonthOf DayOf HourOf MinuteOf MilliSecondOf
####### MilliSecondOf
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
tdate:=StartOfAMonth(2011,08);
return dateTimeToStr(tdate); //输出: 2011-08-01
参考TDateTime
####### EndOfAMonth
范例
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
范例
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
范例
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
范例
范例一:
//取当年的第一个完整周
year:=StartOfAWeek(2011,1,1);
return datetimetostr(year);//输出: 2011-01-03
范例二:
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
范例
范例一:
year:=EndOfAWeek(2011,1,7);
return datetimetostr(year); //输出: 2011-01-09 23:59:59
范例二:
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
范例
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
范例
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
范例
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
范例
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
范例
EndT:=40599; //40559表示2011年1月16号
Return StartOfTheHalfYear(EndT);
//结果:40544 //40544表示2011年1月1号
####### StartOfTheQuarter
范例
EndT:=40540; //40540表示2010年12月28日
Return StartOfTheQuarter (EndT);
//结果:40452 //40452表示2010年10月1号
####### EndOfTheQuarter
范例
EndT:=40540; //40540表示2010年12月28日
Return EndOfTheQuarter (EndT);
//结果:40543 //40543表示2010年12月31号
####### EndOfTheHalfYear
范例
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
范例
hour:=HourOfTheYear(strtodatetime('2011-01-03 10:00:00'));
return hour; //输出: 58
参考TDateTime HourOf MonthOfTheYear WeekOfTheYear DayOfTheYear MinuteOfTheYear SecondOfTheYear MilliSecondOfTheYear
####### HourOfTheMonth
范例
hour:=HourOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return hour;//输出: 514
参考TDateTime HourOf WeekOfTheMonth DayOfTheMonth MinuteOfTheMonth SecondOfTheMonth MilliSecondOfTheMonth
####### MonthOfTheYear
范例
month:=MonthOfTheYear(strtodate('2011-08-08'));
return month; //输出: 8
参考TDateTime MonthOf WeekOfTheYear DayOfTheYear HourOfTheYear MinuteOfTheYear SecondOfTheYear MilliSecondOfTheYear
####### MilliSecondOfTheYear
范例
millisecond:=MilliSecondOfTheYear(strtodatetime('2011-01-03'));
return millisecond; //输出: 172800000
参考TDateTime MilliSecondOf MonthOfTheYear WeekOfTheYear DayOfTheYear HourOfTheYear MinuteOfTheYear SecondOfTheYear
####### WeekOfTheYear
范例
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类型,日期时间
返回:整数,值域是[1,6]
范例:
month:=weekOfTheMonth(strtodatetime('2011-01-22'));
return month;//输出: 3
定义2:WeekOfTheMonth(AValue: TDateTime; var AYear, AMonth: Integer): Integer;
说明:返回由参数AValue指定的时间是处于当月的第几个周。
注意:使用了ISO8601标准,这意味着可能指定的时间所处的周不属于当前月份,那么返回的将是相对与其他月份的周数,通过参数Ayear,Amonth将所属的年份和月份返回
参数:
AValue:日期类型,日期
AYear:整数,年,返回值
AMonth:整数,月,返回值
返回:整数,值域是[1,6]
范例:
week:=WeekOfTheMonth(strtodatetime('2011-01-22'),2011,1);
return week; //输出: 3
参考:TDateTime,DayOfTheMonth,HourOfTheMonth,MinuteOfTheMonth,SecondOfTheMonth,MilliSecondOfTheMonth
####### MinuteOfTheYear
范例
minute:=MinuteOfTheYear(strtodatetime('2011-01-03 10:00:00'));
return minute; //输出: 3480
参考TDateTime MinuteOf MonthOfTheYear WeekOfTheYear DayOfTheYear HourOfTheYear SecondOfTheYear MilliSecondOfTheYear
####### SecondOfTheYear
范例
second:=SecondOfTheYear(strtodatetime('2011-01-03'));
return second; //输出: 208800
参考TDateTime SecondOf MonthOfTheYear WeekOfTheYear DayOfTheYear HourOfTheYear MinuteOfTheYear MilliSecondOfTheYear
####### DayOfTheYear
范例
d:=DayOfTheYear(strtodate('2011-01-03'));
return d ; //输出: 3
参考TDateTime DayOf MonthOfTheYear WeekOfTheYear HourOfTheYear MinuteOfTheYear SecondOfTheYear MilliSecondOfTheYear
####### DayOfTheMonth
范例
day:=DayOfTheMonth(strtodatetime('2011-01-22'));
return day; //输出: 22
参考TDateTime DayOf WeekOfTheMonth HourOfTheMonth MinuteOfTheMonth SecondOfTheMonth MilliSecondOfTheMonth
####### SecondOfTheMinute
范例
second:=SecondOfTheMinute(strtodatetime('2011-01-05 01:30:01'));
return second; //输出: 1
参考TDateTime SecondOf MilliSecondofTheMinute MilliSecondOfTheSecond
####### HourOfTheWeek
范例
hour:=HourOfTheWeek(strtodatetime('2011-01-05 10:00:00'));
return hour; //输出: 58
参考TDateTime HourOf DayOfTheWeek MinuteOfTheWeek SecondOfTheWeek MilliSecondOfTheWeek
####### SecondOfTheMonth
范例
second:=SecondOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return second; //输出: 1850400
参考TDateTime SecondOf WeekOfTheMonth DayOfTheMonth HourOfTheMonth MinuteOfTheMonth MilliSecondOfTheMonth
####### DayOfTheWeek
范例
Dayofweek:=DayOfTheWeek(strtodatetime('2011-01-03'));
return dayofweek;
//输出: 1
参考TDateTime DayOf HourOfTheWeek MinuteOfTheWeek SecondOfTheWeek MilliSecondOfTheWeek
####### MinuteOfTheDay
范例
minute:=MinuteOfTheDay(strtodatetime('2011-01-05 01:22:22'));
return minute; //输出: 82
参考TDateTime MinuteOf HourOfTheDay SecondOfTheDay MilliSecondOfTheDay
####### MilliSecondOfTheSecond
范例
millisecond:=MilliSecondOfTheSecond(strtodatetime('2011-01-05 01:30:01.990'));
return millisecond; //输出:990
参考TDateTime MilliSecondOf MilliSecondofTheMinute
####### SecondOfTheWeek
范例
second:=SecondOfTheWeek(strtodatetime('2011-01-05 10:00:00'));
return second; //输出: 208800
参考TDateTime SecondOf DayOfTheWeek HourOfTheWeek MinuteOfTheWeek MilliSecondOfTheWeek
####### MinuteOfTheMonth
范例
minute:=MinuteOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return minute; //输出: 30840
参考TDateTime MinuteOf WeekOfTheMonth DayOfTheMonth HourOfTheMonth SecondOfTheMonth MilliSecondOfTheMonth
####### MinuteOfTheHour
范例
minute:=MinuteOfTheHour(strtodatetime('2011-01-05 01:30:01'));
return minute; //输出: 30
参考TDateTime MinuteOf MinuteOfTheHour SecondOfTheHour MilliSecondOfTheHour
####### MinuteOfTheWeek
范例
minute:=MinuteOfTheWeek(strtodatetime('2011-01-05 10:00:00'));
return minute; //输出: 3480
参考TDateTime MinuteOf DayOfTheWeek HourOfTheWeek SecondOfTheWeek MilliSecondOfTheWeek
####### MilliSecondOfTheDay
范例
millisecond:=MilliSecondOfTheDay(strtodatetime('2011-01-05 01:30:01'));
return millisecond; //输出: 5401000
参考TDateTime MilliSecondOf HourOfTheDay MinuteOfTheDay SecondOfTheDay
####### MilliSecondOfTheMonth
范例
millisecond:=MilliSecondOfTheMonth(strtodatetime('2011-01-22 10:00:00'));
return millisecond; //输出: 1850400000
参考TDateTime MilliSecondOf WeekOfTheMonth DayOfTheMonth HourOfTheMonth MinuteOfTheMonth SecondOfTheMonth
####### HourOfTheDay
范例
hour:=HourOfTheDay(strtodatetime('2011-01-05 23:22:22'));
return hour;//输出: 23
参考TDateTime HourOf MinuteOfTheDay SecondOfTheDay MilliSecondOfTheDay
####### MilliSecondOfTheHour
范例
millisecond:=MilliSecondOfTheHour(strtodatetime('2011-01-05 01:30:01'));
return millisecond; //输出: 1801000
参考TDateTime MilliSecondOf MinuteOfTheHour SecondOfTheHour
####### SecondOfTheHour
范例
second:=SecondOfTheHour(strtodatetime('2011-01-05 01:30:01'));
return second; //输出: 1801
参考TDateTime SecondOf MinuteOfTheHour MilliSecondOfTheHour
####### MilliSecondofTheMinute
范例
millisecond:=MilliSecondofTheMinute(strtodatetime('2011-01-05 01:30:01'));
return millisecond; //输出: 1000
参考TDateTime SecondOf MilliSecondOf MilliSecondOfTheSecond
####### SecondOfTheDay
范例
second:=SecondOfTheDay(strtodatetime('2011-01-05 01:30:01'));
return second; //输出: 5401
参考TDateTime SecondOf HourOfTheDay MinuteOfTheDay MilliSecondOfTheDay
####### MilliSecondOfTheWeek
范例
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
范例
范例一:
//2010年1月5日至2013年1月4日之间,不足3年,因此,判断为2年内
flag:=WithinPastYears(strtodatetime('2010-01-05'),strtodatetime('2013-01-04'),2);
return flag; //输出: 1
范例二:
////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
范例
范例一:
//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
范例二:
flag:=WithinPastMonths(strtodatetime('2011-01-05'),strtodatetime('2011-07-07'),5);
return flag; //输出: 0
参考TDateTime WithinPastYears WithinPastWeeks WithinPastDays WithinPastHours WithinPastSeconds WithinPastMinutes WithinPastMilliSeconds
####### WithinPastWeeks
范例
范例一:
//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
范例二:
//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
范例
范例一:
flag:=WithinPastDays(strtodate('2011-01-01'),strtodate('2011-01-11'),10);
return flag; //输出: 1
范例二:
flag:=WithinPastDays(strtodate('2011-01-01'),strtodate('2011-01-12'),10);
return flag; //输出: 0
参考TDateTime WithinPastYears WithinPastMonths WithinPastWeeks WithinPastHours WithinPastSeconds WithinPastMinutes WithinPastMilliSeconds
####### WithinPastHours
范例
范例一:
//不足11个小时
flag:=WithinPastHours(strtodatetime('2011-01-01 00:00:00'),strtodatetime('2011-01-01 10:30:00'),10);
return flag; //输出: 1
范例二:
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
范例
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
范例
范例一:
flag:=WithinPastSeconds(strtodatetime('2011-01-01 10:00:00'),strtodatetime('2011-01-01 10:00:10'),10);
return flag; //输出: 1
范例二:
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
范例
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
范例
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
范例
months:=MonthsBetween(strtodatetime('2011-05-01'),strtodatetime('2011-08-01'));
return months; //输出: 3
参考TDateTime YearsBetween WeeksBetween DaysBetween HoursBetween MinutesBetween SecondsBetween MilliSecondsBetween
####### WeeksBetween
范例
weeks:=WeeksBetween(strtodatetime('2011-05-01'),strtodatetime('2011-08-01'));
return weeks; //输出: 13
参考TDateTime YearsBetween MonthsBetween DaysBetween HoursBetween MinutesBetween SecondsBetween MilliSecondsBetween
####### DaysBetween
范例
范例一:
days:=DaysBetween(strtodate('2011-05-01'),strtodate('2011-08-01'));
return days;//输出: 92
范例二:
//不足完整的一天: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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
incyears:=IncYear(strtodatetime('2010-08-01'),10);
return datetostr(incyears); //输出: 2020-08-01
参考TDateTime
####### IncHalfYear
范例
Avalue:=40179; //40179表示2010年1月1号
Number:=2;
Return IncHalfYear(AValue,Number);
//结果:40544 //40544表示2011年1月1号
####### IncQuarter
范例
Avalue:=40179; //40179表示2010年1月1号
Number:=2;
Return IncQuarter(AValue,Number);
//结果:40360 //40360表示2010年7月1号
####### IncMonth
范例
incmonths:=IncMonth(strtodatetime('2010-08-01'),2);
return datetostr(incmonths); //输出: 2010-10-01
参考TDateTime
####### IncWeek
范例
incweeks:=IncWeek(strtodatetime('2010-08-01'),1);
return datetostr(incweeks); //输出: 2010-08-08
参考TDateTime
####### IncDay
范例
incdays:=IncDay(strtodatetime('2010-08-01'),10);
return datetostr(incdays); //输出: 2010-08-11
参考TDateTime
####### IncHour
范例
inchours:=IncHour(strtodatetime('2010-08-01 00:01:01'),10);
return datetimetostr(inchours); //输出: 2010-08-01 10:01:01
参考TDateTime
####### IncMinute
范例
incminutes:=IncMinute(strtodatetime('2010-08-01 00:01:01'),50);
return datetimetostr(incminutes); //输出: 2010-08-01 00:51:01
参考TDateTime
####### IncSecond
范例
incseconds:=IncSecond(strtodatetime('2010-08-01 00:01:01'),50);
return datetimetostr(incseconds); //输出: 2010-08-01 00:01:51
参考TDateTime
####### IncMilliSecond
范例
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
范例
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
范例
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
范例
//一个自然周至少要有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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
Flag:=TryEncodeDateDay(2011,1,Atime);
returnarray(flag,datetimetostr(Atime));//输出: array(1,'2011-01-01')
参考TDateTime YearOf MonthOf DayOf HourOf MinuteOf SecondOf MilliSecondOf TryEncodeDateTime TryEncodeDateWeek TryEncodeDateMonthWeek
####### TryEncodeDateMonthWeek
范例
Flag:=TryEncodeDateMonthWeek(2011,1,1,1,Atime);
returnarray(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
范例
范例一:
newTime:=RecodeYear(strtoDatetime("2010-08-01"),2009);
return datetimetostr(newTime); //输出: 2009-08-01
范例二:
//用try...except...end语句进行异常处理,如果无法替换成有效的日期,则把NewTime设置为0.
try
newTime:=RecodeYear(strtoDatetime("2012-02-29"),2013);
except
newTime:=0;
end;
return newTime; //输出: 0
参考TDateTime
####### RecodeMonth
范例
范例一:
try
newTime:=RecodeMonth(strtodatetime("2011-08-10"),10);
newTime:=datetimetostr(newTime);
except
newTime:=0;
end;
return newTime; //输出: 2011-10-10
范例二:
try
newTime:=RecodeMonth(strtodatetime("2013-3-31"),4);
newTime:=datetimetostr(newTime);
except
newTime:=0;
end;
return newTime; //输出: 0
参考TDateTime
####### RecodeDay
范例
范例一:
try
newTime:=RecodeDay(strtodatetime("2011-08-10"),1);
newTime:=datetostr(newTime);
except
newTime:=0;
end;
returnnewTime; //输出: 2011-08-01
范例二:
try
newTime:=RecodeDay(strtodatetime("2011-02-28"),31);
newTime:=datetostr(newTime);
except
newTime:=0;
end;
returnnewTime; //输出: 0
参考TDateTime
####### RecodeHour
范例
newTime:=RecodeHour(strtodatetime("2011-08-10 12:12:12"),1);
return datetimetostr(newTime); //输出: 2011-08-10 01:12:12
参考TDateTime
####### RecodeMinute
范例
newTime:= RecodeMinute (strtodatetime("2011-08-10 12:12:12"),9);
return datetimetostr(newTime);//输出: 2011-08-10 12:09:12
参考TDateTime
####### RecodeSecond
范例
newTime:=RecodeSecond(strtodatetime("2011-08-10 12:12:12"),9);
return datetimetostr(newTime);//输出: 2011-08-10 12:12:09
参考TDateTime
####### RecodeMilliSecond
范例
newTime:=RecodeMilliSecond(strtodatetime("2011-08-10 12:12:12.999"),100);
return MilliSecondOf (newTime);//输出: 100
参考TDateTime
####### RecodeDate
范例
newTime:=RecodeDate(strtodatetime("2011-08-10 12:12:12"),2010,8,9);
return datetimetostr(newTime); //输出: 2010-08-09 12:12:12
参考TDateTime
####### RecodeTime
范例
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
范例
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
范例
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
范例
result:=CompareDateTime(strtodatetime("2011-08-10"),strtodatetime("2011-08-11"));
return result; //输出: -1
参考TDateTime
####### SameDateTime
范例
flag:=SameDateTime(strtodatetime("2011-08-10"),strtodatetime("2011-08-11"));
return flag; //输出: 0
参考TDateTime
####### CompareDate
范例
result:=CompareDate(strtodatetime("2011-08-10"),strtodatetime("2011-08-11"));
return result; //输出: -1
参考TDateTime
####### SameDate
范例
flag:=SameDate(strtodatetime("2011-08-1001:00:00"),strtodatetime("2011-08-1002:00:00"));
return flag; //输出: 1
参考TDateTime
####### CompareTime
范例
result:=CompareTime(strtodatetime("2011-08-10 01:00:00"),strtodatetime("2011-08-11 01:00:00"));
return result; //输出: 0
参考TDateTime
####### SameTime
范例
result:=SameTime(strtodatetime("2011-08-10 01:00:00"),strtodatetime("2011-08-11 01:00:00"));
return result; //输出: 1
参考TDateTime
####### NthDayOfWeek
范例
EndT:=strtodatetime("2014-01-06");
weekNum:=NthDayOfWeek(EndT);
WOFM:=WeekOfTheMonth(EndT);
return array(weekNum,WOFM); //输出: array(1,2)
参考TDateTime
####### DecodeDayOfWeekInMonth
范例
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
范例
//2013年10月1日是周二,1日至6日不属于这个月的周,从7日(周一)所属周开始算起
return EncodeDayOfWeekInMonth(2013,10,2,1);//输出41561('2013-10-14')
参考TDateTime
####### TryEncodeDayOfWeekInMonth
范例
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
范例
return DateTimeToJulianDate(strtodatetime('2014-01-01 10:00:00'));
//输出2456658.91667
参考TDateTime JulianDateToDateTime TryJulianDateToDateTime DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime TryModifiedJulianDateToDateTime DateTimeToUnix UnixToDateTime
####### JulianDateToDateTime
范例
A := JulianDatetoDateTime(2456658.91667);
return DatetimetoStr(A); //输出2014-01-01 10:00:00
参考TDateTime DateTimeToJulianDate TryJulianDateToDateTime DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime TryModifiedJulianDateToDateTime DateTimeToUnix UnixToDateTime
####### TryJulianDateToDateTime
范例
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
范例
a := DateTimeToModifiedJulianDate(strtodatetime('2014-01-01 10:00:00'));
return a; //输出56658.41667
参考TDateTime DateTimeToJulianDate JulianDateToDateTime TryJulianDateToDateTime ModifiedJulianDateToDateTime TryModifiedJulianDateToDateTime DateTimeToUnix UnixToDateTime
####### ModifiedJulianDateToDateTime
范例
t := ModifiedJulianDateToDateTime(56658.41667);
return datetimetostr(t); //输出2014-01-01 10:00:00
参考TDateTime DateTimeToJulianDate DateTimeToUnix JulianDateToDateTime TryJulianDateToDateTime UnixToDateTime DateTimeToModifiedJulianDate TryModifiedJulianDateToDateTime
####### TryModifiedJulianDateToDateTime
范例
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
范例
return DateTimeToUnix(strtodatetime('2014-01-01 10:00:00'));
//输出1388570400
参考TDateTime DateTimeToJulianDate JulianDateToDateTime TryJulianDateToDateTime DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime TryModifiedJulianDateToDateTime UnixToDateTime
####### UnixToDateTime
范例
T:=UnixToDateTime(1388570400);
return datetimetostr(T);
//输出2014-01-01 10:00:00
参考TDateTime DateTimeToJulianDate JulianDateToDateTime TryJulianDateToDateTime DateTimeToModifiedJulianDate ModifiedJulianDateToDateTime TryModifiedJulianDateToDateTime DateTimeToUnix
####### FileDateToDateTime
范例
EndT:=FileDateToDateTime(1143033856);
return datetimetostr(EndT);
//输出:2014-01-01 10:00:00
差异说明依赖运行时操作系统相关API,与DateTimeToFileDate相对。
具体差异表现可参考:FAQ:DateTimeToFileDate
####### DateTimeToFileDate
范例
EndT:=strtodatetime('2014-01-01 10:00:00');
FileEndT:=DateTimeToFileDate(EndT);
return array(EndT,FileEndT);
//比较两种日期输出
//输出:array(41640.41667,1143033856)
差异说明转化的结果依赖运行时操作系统相关API,转换结果会存在差异,但是同一系统中,转换与转回是自恰的。
即,通过DateTimeToFileDate转换后的结果,再通过FileDateToDateTime转回,可以得到最初未转换之前的值。
如:
fdate:= DateTimeToFileDate(20240525.1430T);
echo fdate; //windows下返回:1488548800 Linux中返回:1716618600
t:= FileDateToDateTime(fdate);
return t; //都返回20240525.1430T
####### ExcelRDate
范例
RDate:=20101231;
Return ExcelRDate(RDate);
//结果:2010-12-31
宽字节日期格式转换函数
####### 内容
- DateTimeGMTToCookieStrw
- DateTimeGMTToHttpStrw
- DateTimeToInternetStrw
- Datetimetostrw
- TimetoStrw
- DateToStrw
####### DateTimeGMTToCookieStrw
范例
return DateTimeGMTToCookieStrw(20200723.110633T);
//输出Thu, 23-Jul-2020 11:06:33 GMT
####### DateTimeGMTToHttpStrw
范例
return DateTimeGMTToHttpStrw(20200723.110633T);
//输出Thu, 23 Jul 2020 11:06:33 GMT
####### DateTimeToInternetStrw
范例
return DateTimeToInternetStrw(20200723.110633T,0);
//输出Thu, 23 Jul 2020 11:06:33 +0800
####### Datetimetostrw
范例
return datetimetostrw(20200720.0930T);
//输出宽字节字符串:2020-07-20 09:30:00
####### TimetoStrw
范例
return TimetoStrw(9.5/24);//输出宽字节字符串:09:30:00
return TimetoStrw(20200720.0930T); //输出宽字节字符串:09:30:00
####### DateToStrw
范例
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
范例
a:=StrCmp("arr","arry");
return a; //
输出;-1
差异说明返回值的绝对值大小无实际意义,在不同操作系统中,其绝对值大小也表现不一。
比如,对比字符或ASCII码的比较,在Linux中,返回ASCII码相差的值,Windows中只返回-1,0,1等代表大小,但是符号是一致的。
如strcmp(#97,#100);// Windows返回-1,Linux中返回-3。
####### Chr
范例
aValue:=Chr(50);
return aValue;
//输出:字符串'2'
参考Ord
####### WideChr
范例
aValue:=WideChr(25105);
return aValue;
//输出:Unicode字符串L'我'
参考Ord
####### Str2Array
范例
r:= Str2Array("SZ000001;SZ000002;SH600000",";") ; //以分号分隔
return r;
//输出:array("SZ000001","SZ000002","SH600000")
参考Array2Str
####### Concat
范例
范例01:
arr :=Concat("thank-","you-","very-","much! ");
return arr; //输出:thank-you-very-much!
范例02:Unicode字符串的合并
s1:=multibytetounicodew('天软',936);
s2:= Inttostrw(2020);
return concat(s1,s2);
//输出宽字节字符串:天软2020
####### Array2Str
范例
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的使用范例)
//指定前2个数值转化为十进制数字字符串,第3个整数转化成十六进制字符串,3个数值必须是整数。
//第2个转化%-5d:由于3只有1位,需要左对齐,则在右边添加4位空格
return Format('%d,%-5d,%X',4,3,12);
//输出字符串:4,3 ,C
范例02:(E的使用范例)
//.1表示后面的小数位的精度。注意,v必须是一个浮点数,比如1234400.0,如果是1234400则被认为是整数,执行函数报错
return format("%.1E",1234400.0);
//输出字符串:1.2E+006
范例03:(F的使用范例)
return format("%.1f",1234400.56789);
//输出字符串: 1234400.6
范例04:(G的使用范例)
return format("%G",1.2E+006);
//输出字符串:1200000
范例05:(N的使用范例)
return format("%.1N",1234400.56789);
//输出字符串:1,234,400.6
范例06:(M的使用范例)
return format("%.1M",1234400.56789);
//输出字符串:¥1,234,400.6
范例七:(参数的索引)
return Format('%2:d,%1:5d,%0:X',14,3,12);
//输出字符串:12, 3,E
参考SetFormatLocalCode GetFormatLocalCode AnsiFormat
####### Ord
范例
r:=Ord("2");
return r; //输出:50
参考Chr
####### SetLength
范例
//相当于截取了源串S的前NewLength个字符
S:='thankyou';
SetLength(S,5);
return S;
//输出字符串:thank
####### CompareText
范例
Return CompareText("SZ000002","SZ000001"); //输出:1
Return CompareText("SZ000001","sz000001");//输出:0
Return CompareText("万科A","万科A");//输出:-65248
参考CompareStr
差异说明返回值的绝对值大小无实际意义,仅符号有效。不同操作系统中,返回的绝对值会存在差异,但是在同一个操作系统中,结果是确定的。
如执行:return CompareText("Tinysoft","tsl");
在Windows下返回-1,在Linux中返回:-10
####### Copy
范例
a:=Copy('thank you',3,6);
return a;//输出字符串:ank yo
参考Concat
####### UpperCase
范例
Return UpperCase("sz000001");
//输出:SZ000001
参考LowerCase
####### LeftBStr
范例
arr:=LeftBStr("i am a student",4);
return arr;//输出字符串:i am
####### RightBStr
范例
arr:=RightBStr("i am a student",4);
return arr;//输出:dent
####### MidBStr
范例
arr:=midBStr("i am a student",6,6);
return arr;//输出: a stud
####### GetFormatLocalCode
范例
SetFormatLocalCode(0);
return GetFormatLocalCode();//输出:0
参考SetFormatLocalCode Format AnsiFormat
####### Str
范例
Str(114,s);
return s;//输出:1.14000000000000E+0002
参考Val
####### RightStr
范例
return RightStr('abccccdddd',2);
//结果:’dd’
####### CompareStr
范例
Return CompareStr("万科A","万科A");
//输出:-65248
参考CompareText
差异说明返回值的绝对值大小无实际意义,仅符号有效。不同操作系统中,返回的绝对值会存在差异,但是在同一个操作系统中,结果是确定的。
如执行:return CompareStr("Tinysoft","tsl");
在Windows下返回-1,在Linux中返回:-2099710
####### LeftStr
范例
return LeftStr('abccccdddd',2);
//结果:’ab’
####### Trim
范例
Return Trim(" Hello! \r\n Tinysoft ");
{输出字符串(把Hello前的空格以及Tinysoft后的空格删除,并把\r\n转义)
"Hello!
Tinysoft"
}
参考TrimLeft TrimRight
####### SameText
范例
Return SameText("SZ000001","sz000001");//输出:1
//输出:1
####### SetChar
范例
var arr:="I am a student";
SetChar(arr,10,116);
return arr;//输出: I am a sttdent
####### AppendStr
范例
s:="申万";
AppendStr(s,"采掘");
Return s;//输出:申万采掘
####### GetChar
范例
arr:=GetChar("i am a student",9);
return arr;//输出: 116
####### LowerCase
范例
Return LowerCase("万科A");
//输出: 万科a
参考UpperCase
####### SetFormatLocalCode
范例
SetFormatLocalCode(0);
return GetFormatLocalCode();//输出:0
参考GetFormatLocalCode Format AnsiFormat
####### Val
范例
范例一:
Val("1.1424E+0002",v,Code);
return v;//输出:114.24
范例二:
//返回错误信息:在转换到第6位字符时不成功。
Val("1.142aE+0002",v,Code);
return array(v,code);//输出:array(1.142,6)
参考Str
####### Pos
范例
a:=Pos('a','thank you');
return a;//输出:3
Return Pos('fg','adcfgvbhj');
//结果:4
参考Copy Concat
####### TrimRight
范例
Return TrimRight("Hello! \r\n Tinysoft ");
{输出字符串
" Hello!
Tinysoft "
}
参考Trim TrimLeft
####### AnsiFormat
参考GetFormatLocalCode SetFormatLocalCode Format
####### TrimLeft
范例
Return TrimLeft("Hello! \r\n Tinysoft ");
{输出字符串
"Hello!
Tinysoft "
}
参考Trim TrimRight
####### StrToIntDef
范例
范例01
return StrToIntDef("12",1);//输出: 12
return StrToIntDef("test",1);//输出: 1
范例02:十六进制格式字符串的转换
return StrToIntDef("0x12",1);//输出: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 |
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
范例
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
范例
return booltostr2(2>1);//返回’ True’
####### StrToFloatDef
范例
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
范例
Return IntToHex(43,1);
//输出: 2B(二进制时候为:101011)
参考StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr
####### TryStrToInt
范例
范例01:转换成功
ret := TryStrToInt("12",value);
if ret then
return value;
else
return "转换失败!";
//输出: 12
范例02:转换失败
ret := TryStrToInt("test",value);
if ret then
return value;
else
return "转换失败!";
//输出: "转换失败!"
范例03:十六进制格式字符串的转换
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
范例
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
范例
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
范例
Return FormatCurr('0.000E+00',232.24);
//输出:2.322E+02
参考SetFormatLocalCode GetFormatLocalCode
####### TryStrToCurr
范例
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
范例
范例一:
Return StrToInt("12");
//输出: 12
范例二:支持16进制字符串的转换
Return StrToInt("0xC");
//输出: 12
参考StrToInt IntToHex StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr
####### BoolToStr
范例
Return BoolToStr(1>2,0);
//输出:0
参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef TryStrToBool FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr
####### CurrToStr
范例
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
范例
TryStrToBool("12",s);
Return s;//输出: 1
参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt StrToBoolDef BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr
####### SpaceByNumber
范例
return write('---',SpaceByNumber(2),'---');
运行信息打印结果:
####### IsValidIdent
范例
Return IsValidIdent('a0ffh2');
//输出: 1
####### StrToBool
范例
ReturnStrToBool("12"); //输出: 1
ReturnStrToBool("0"); //输出: 0
参考IntToHex StrToInt IntToStr StrToIntDef TryStrToInt StrToBoolDef TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr
####### StrToFloat
范例
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
范例
Return StrToBoolDef("12",3);
//输出: 1
参考IntToHex StrToInt StrToBool IntToStr StrToIntDef TryStrToInt TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr
####### IntToStr
范例
Return IntToStr(43);
//输出:"43"
参考IntToHex StrToInt StrToBool StrToIntDef TryStrToInt StrToBoolDef TryStrToBool BoolToStr FloatToStr CurrToStr StrToFloat StrToFloatDef TryStrToFloat StrToCurr StrToCurrDef TryStrToCurr
####### StrToCurr
范例
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
范例
r:= ansiStr2Array("和顺电气退和顺电气","退") ; //以中文分隔
return r;//输出:array("和顺电气","和顺电气")
参考str2array
####### TryUppercase
范例
return TryUppercase("abc");
//结果:"ABC"
####### TryLowercase
范例
return TryUppercase("ABC");
//结果:"abc"
####### SysEncodecryptStr
范例
s:="Server=127.0.0.1;Database=tsBase;Uid=TinySoft;Pwd=admin;";
encodeS:=sysencodecryptstr(s,0);
return encodeS;
返回字符串:_ENCODE_3A364432572518291B2C02321C2C0233084C2D59385A3B482D10641755344722194C25417C28412F56056A0C78431364003D5C38553C5269
####### Letters
范例
return letters(1,0);
//结果:a
####### DecToInt64
范例
范例01:
return DecToInt64("12");//输出: 12L
范例02:十六进制格式字符串的转换
return DecToInt64("0x12");//报错
return StrToInt64("0x12");//输出:18L
####### DecToInt64def
范例
范例01
return DecToInt64Def("12",1);//输出: 12L
return DecToInt64Def("test",1);//输出: 1L
范例02:十六进制格式字符串的转换
return DecToInt64Def("0x12",1);//输出: 1L
return StrToInt64Def("0x12",1);//输出:18L
####### TryDecToInt64
范例
范例01:转换成功
ret := TryDecToInt64("12",value);
if ret then
return value;
else
return "转换失败!";
//输出: 12L
范例02:转换失败
ret := TryDecToInt64("test",value);
if ret then
return value;
else
return "转换失败!";
//输出: "转换失败!"
范例03:十六进制格式字符串的转换
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
return DecToInt32("12");//输出: 12
范例02:十六进制格式字符串的转换
return DecToInt32("0x12");//报错
return StrToInt32("0x12");//输出:18
####### DecToInt32def
范例
范例01
return DecToInt32Def("12",1);//输出: 12
return DecToInt32Def("test",1);//输出: 1
范例02:十六进制格式字符串的转换
return DecToInt32Def("0x12",1);//输出: 1
return StrToInt32Def("0x12",1);//输出:18
####### TryDecToInt32
范例
范例01:转换成功
ret := TryDecToInt32("12",value);
if ret then
return value;
else
return "转换失败!";
//输出: 12
范例02:转换失败
ret := TryDecToInt32("test",value);
if ret then
return value;
else
return "转换失败!";
//输出: "转换失败!"
范例03:十六进制格式字符串的转换
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:
return StrToInt64("12");//输出: 12L
范例02:十六进制格式字符串的转换
return StrToInt64("0x12");//输出:18L
####### StrToInt64Def
范例
范例01
return StrToInt64Def("12",1);//输出: 12L
return StrToInt64Def("test",1);//输出: 1L
范例02:十六进制格式字符串的转换
return StrToInt64Def("0x12",1);//输出:18L
####### TryStrToInt64
范例
范例01:转换成功
ret := TryStrToInt64("12",value);
if ret then
return value;
else
return "转换失败!";
//输出: 12L
范例02:转换失败
ret := TryStrToInt64("test",value);
if ret then
return value;
else
return "转换失败!";
//输出: "转换失败!"
范例03:十六进制格式字符串的转换
ret := TryStrToInt64("0x12",value);
if ret then
return value;
else
return "转换失败!";
//输出:18L
####### StrToInt32
范例
范例01:
return StrToInt32("12");//输出: 12
范例02:十六进制格式字符串的转换
return StrToInt32("0x12");//输出:18
####### StrToInt32Def
范例
范例01
return StrToInt32Def("12",1);//输出: 12
return StrToInt32Def("test",1);//输出: 1
范例02:十六进制格式字符串的转换
return StrToInt32Def("0x12",1);//输出:18
####### TryStrToInt32
范例
范例01:转换成功
ret := TryStrToInt32("12",value);
if ret then
return value;
else
return "转换失败!";
//输出: 12
范例02:转换失败
ret := TryStrToInt32("test",value);
if ret then
return value;
else
return "转换失败!";
//输出: "转换失败!"
范例03:十六进制格式字符串的转换
ret := TryStrToInt32("0x12",value);
if ret then
return value;
else
return "转换失败!";
//输出:18
####### DecToInt
范例
范例01
return DecToInt("12");//输出: 12
范例02:十六进制格式字符串的转换
return DecToInt("0x12");//报错
return StrToInt("0x12");//输出:18
####### DecToIntDef
范例
范例01
return DecToIntDef("12",1);//输出: 12
return DecToIntDef("test",1);//输出: 1
范例02:十六进制格式字符串的转换
return DecToIntDef("0x12",1);//输出: 1
return StrToIntDef("0x12",1);//输出:18
####### TryDecToInt
范例
范例01:转换成功
ret := TryDecToInt("12",value);
if ret then
return value;
else
return "转换失败!";
//输出: 12
范例02:转换失败
ret := TryDecToInt("test",value);
if ret then
return value;
else
return "转换失败!";
//输出: "转换失败!"
范例03:十六进制格式字符串的转换
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
范例
text:='abcdefg' ;
return AnsiContainsText(text,'Abcd');
//输出:1,包含
参考AnsiContainsStr
####### AnsiStartsText
范例
text:='abcdefg';
return AnsiStartsText('Abc',text);
//输出:1
参考AnsiStartsStr
差异说明对于空字符串,windows系统中判定为1,Linux中判定为0。其它表现无差别。
如:return AnsiStartsText("","A"); //windows中返回1,而Linux中返回0。
####### AnsiEndsText
范例
text:='abcdefg';
return AnsiEndsText('Efg', text);
//输出:1
参考AnsiEndsStr
差异说明对于空字符串,windows系统中判定为1,Linux中判定为0。其它表现无差别。
如:return AnsiEndsText("","A"); //windows中返回1,而Linux中返回0。
####### AnsiMatchText
范例
AText := 'ABZ';
AValues:= array();
AValues[0]:='abcdefg';
AValues[1]:='abz';
Return AnsiMatchText(AText, AValues);
//输出:1
//ab不能完全匹配Avalues数组中的值
Return AnsiMatchText('ab', AValues);
//输出:0
参考AnsiMatchStr
####### AnsiContainsStr
范例
AText:='abcdefg';
Return AnsiContainsStr(AText,'Bcd');
//输出:1
参考AnsiContainsText
####### AnsiStartsStr
范例
Atext:='abcdefg';
Return AnsiStartsStr('abcd',Atext);
//输出:1
参考AnsiStartsText
####### AnsiEndsStr
范例
text:='abcdefg';
return AnsiEndsStr('efg', text);
//输出:1
参考AnsiEndsText
####### AnsiMatchStr
范例
AText := 'ABZ';
AValues:= array();
AValues[0]:='abcdefg';
AValues[1]:='abz';
Return AnsiMatchStr(AText, AValues);
//输出:0 ,大小写敏感
参考AnsiEndsText
####### FormatStrExt
范例
Return FormatStrExt('aaaaa');
//结果:’aaaaa’
Return FormatStrExt(123);
//结果:’-’
替换以及处理函数
####### 内容
- StuffString
- AnsiReplaceText
- AnsiReplaceStr
- ReplaceText
- ReplaceStr
- WrapText
- AdjustLineBreaks
- ReverseString
- SeprateStrToTotal
- TotalStrToSeprate
- DateStrToArr
- RdateStrToArr
####### StuffString
范例
Atext := "Here will be instead by \'HERE\'";
ASubText := "HERE";
Return StuffString(Atext,1,4,ASubText);
//输出:HERE will be instead by ‘HERE’
####### AnsiReplaceText
范例
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
范例
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
范例
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
范例
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
范例
ConstLine := "Separate this sentence to two lines.";
Return WrapText(ConstLine,20);
{输出:
(自动换行时考虑字词的完整性)
Separate this
sentence to two
lines.
}
####### AdjustLineBreaks
范例
范例01:调整字符串的换行模式
r:= AdjustLineBreaks("Tinysoft \r\n Statistical \r\nanalysis Language",1);
return r;
{输出字符串:
Tinysoft
Statistical
analysis Language
}
范例02:数组中的应用-批量操作
r:=adjustlinebreaks(array("Tinysoft \n Statistical \nanalysis Language","aa\r\nbb"),1);
return r;
输出结果:字符串中的换行符统一转换成\r\n
####### ReverseString
范例
return ReverseString('abcde1234');
//返回字符串:4321edcba
ho tostn(r);//输出:"Tinysoft\n Statistical \nanalysis Language"
####### SeprateStrToTotal
范例
return SeprateStrToTotal('债券型;现金型;配置型;股票型;保本型');
//结果:’债券型#现金型#配置型#股票型#保本型’
####### TotalStrToSeprate
范例
return TotalStrToSeprate ('债券型#现金型#配置型#股票型#保本型');
//结果:’债券型;现金型;配置型;股票型;保本型’
####### DateStrToArr
范例
return DateStrToArr('2007-9-10;2007-9-10','$',';');//'$'表示结束位置
结果:
####### RdateStrToArr
范例
return RDateStrToArr('20070331;20070630');
结果:
字符串数组相关函数
####### 内容
- AnsiIndexText
- AnsiIndexStr
####### AnsiIndexText
范例
egStr:= "ansiIndexText";
strArr:= array("Tinysoft","Statistical","analysis","Language","ansiIndexText");
result:=ansiIndexText(egStr,strArr);
return result;
//4
参考AnsiIndexStr
####### AnsiIndexStr
范例
//大小写敏感,没有找到相应的字符串,返回-1
egStr:= "ansiIndexstr";
strArr:= array("Tinysoft","Statistical","analysis","Language","ansiIndexStr");
result:=ansiIndexStr(egStr,strArr);
return result;
//输出:-1
参考AnsiIndexText
重复函数
####### 内容
- DupeString
####### DupeString
范例
S:= DupeString('Ha', 5);
return s;
//输出:表示将S的值变为'HaHaHaHaHa'
多字节语言支持函数
####### 内容
- LengthW
- MidStr
####### LengthW
范例
testStr:= "Tinysoft lengthW:汉字当成一个字符";
return lengthW(testStr);
//输出:25(包括空格和:)
参考LeftStr RightStr MidStr
####### MidStr
范例
testStr:= "Tinysoft midStr:支持多字节语言,汉字当成一个字符";
return midStr(testStr,10,30);
//输出字符串:“midStr:支持多字节语言,汉字当成一个字符”
参考LeftStr RightStr LengthW
字节函数
字节函数,处理非MBCS的原始字符串,本身存在非B或者ANSI版本。
####### 内容
- ContainsText
- StartsText
- EndsText
- ContainsStr
- StartsStr
- EndsStr
- StuffbString
- ReversebString
####### ContainsText
范例
a:=L'2020Tinysoft 天软';
b:=L'tinysoft';
return ContainsText(a,b); //返回1,包含
####### StartsText
范例
text:='abcdefg';
return StartsText('Abc',text);
//输出:1
差异说明对于空字符串,windows系统中判定为1,Linux中判定为0。其它表现无差别。
如:return StartsText("","A"); //windows中返回1,而Linux中返回0。
####### EndsText
范例
text:='abcdefg';
return EndsText('Efg', text);
//输出:1
差异说明对于空字符串,windows系统中判定为1,Linux中判定为0。其它表现无差别。
如:return EndsText("","A"); //windows中返回1,而Linux中返回0。
####### ContainsStr
范例
a:='2020Tinysoft 天软';
b:='tinysoft';
c:='Tinysoft';
return array(ContainsStr(a,b),ContainsStr(a,c));
//输出:array(0,1)
####### StartsStr
范例
Atext:='abcdefg';
Return StartsStr('abcd',Atext);
//输出:1
####### EndsStr
范例
text:='abcdefg';
return EndsStr('efg', text);
//输出:1
####### StuffbString
范例
Atext := "Here will be instead by \'HERE\'";
ASubText := "HERE";
Return StuffbString(Atext,1,4,ASubText);
//输出:HERE will be instead by ‘HERE’
####### ReversebString
范例
a:=L'2020Tinysoft 天软';//宽字节字符串的表达方式
return ReversebString(a);
//返回字符串:软天 tfosyniT0202
发音相关函数
####### 内容
- SoundEx
- SoundexInt
- DecodeSoundexInt
- SoundexWord
- DecodeSoundexWord
- SoundexSimilar
- SoundexCompare
- SoundexProc
- AnsiResemblesText
####### SoundEx
范例
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
范例
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
范例
testStr:= "Tinysoft SoundexInt:返回表示AText的发音的整数";
testStr:=DecodeSoundexInt(SoundexInt(testStr,4));
return testStr;
//T521
参考SoundexInt
####### SoundexWord
范例
testStr:= "Tinysoft SoundexInt:返回表示AText的发音的整数";
testStr:= soundexWord(SoundEx(testStr,4));
return testStr;
//24206
参考DecodeSoundexWord
####### DecodeSoundexWord
范例
testStr:= "Tinysoft SoundexInt:返回表示AText的发音的整数";
testStr:=decodesoundexWord(soundexWord(SoundEx(testStr,4)));//24206
return testStr;
//T000
参考SoundexWord
####### SoundexSimilar
范例
return SoundexSimilar("sun","sum");
//输出:1
return SoundexSimilar("sun","fun");
//输出:0
return SoundexSimilar("return","result");
//输出:0
####### SoundexCompare
范例
return SoundexCompare("sun","sum");
//输出:0
return SoundexCompare("sun","fun");
//输出:1
return SoundexCompare("result","return");
//输出:-1
####### SoundexProc
范例
return SoundexProc("sun","sum");
//输出:1
return SoundexProc("sun","fun");
//输出:0
return SoundexProc("transaction","transact");
//输出:1
####### AnsiResemblesText
范例
return AnsiResemblesText("sun","sum");
//输出:1
return AnsiResemblesText("sun","fun");
//输出:0
return AnsiResemblesText("transaction","transact");
//输出:1
正则表达式函数
####### 内容
- ParseRegExpr
- ParseRegExpr:替换功能
- GetLikeFlag
- SetLikeFlag
- ReplaceStrByReg
- ReplaceTextByReg
- ParseRegExpr3
####### ParseRegExpr
范例
范例01:匹配数字、指定字符串
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:匹配数字、字符串、带括号的字符串
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串-匹配汉字
source:=L"hello 你好!123"; //unicode串
reg:=L"[\u4E00-\u9FA5]+"; //匹配汉字的正则表达式->也是unicode串
ret:=ParseRegExpr(reg,source,"",result,MPos,Mlen);
return result;
返回结果:array((L"你好"))
范例04:通过控制符"u"设置为非贪婪模式
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:替换功能
范例
范例三:求值宏
//求值宏,将数字后的字母替换到数字前
source:="ddd2011a uuuu 2012b zzzz 2013c xxx";
ParseRegExpr("(\\d+)(\\w+)",source,"r","$2$1",s );
return s;
//结果:
ddda2011 uuuu b2012 zzzz c2013 xxx
范例四:回调函数
//回调函数,替换匹配串第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
范例
s:="ParseRegExpr 2011 \r\n ShenZhenTinysoft (TSL)";
reg:="(\\d+).*(tinysoft)";
SetLikeFlag(0b0001+0x0010); //大小写无关+使 '.' 特殊字符匹配任意字符
r:= s like reg;
return getlikeflag();//获取当前正则控制符状态
//返回17
####### SetLikeFlag
范例
s:="ParseRegExpr 2011 \r\n ShenZhenTinysoft (TSL)";
reg:="(\\d+).*(tinysoft)";
SetLikeFlag(0b0001+0x0010); //大小写无关+使 '.' 特殊字符匹配任意字符
return s like reg;
返回:1
####### ReplaceStrByReg
范例
return ReplaceStrByReg("abcdeak","A","kkkk");
//结果:abcdeak
####### ReplaceTextByReg
范例
return ReplaceTextByReg("abcdeak","a","kkkk");
//结果:kkkkbcdekkkkk
####### ParseRegExpr3
范例
return ParseRegExpr3("abcdeak","ab","kkkk","ir");
//结果:kkkkcdeak
正则表达式
####### 内容
- 什么是正则表达式
- 正则表达式基础
- 正则表达式中的元字符
####### 什么是正则表达式
一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用,不过,经过学习之后这些复杂的表达式其实相当简单,而且,一旦弄懂了,你就能把难处理而且容易出错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。正则表达式被各种语言、编辑工具、脚本工具广泛的支持,TSL语言也支持它。
但是,由于正则表达式本身缺少一个规范,因此,各个系统对正则表达式的实现也不同,TSL语言中采用了PERL兼容的正则表达式。
####### 正则表达式基础
正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。
在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。
####### 正则表达式中的元字符
要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。
注:由于TSL语言的字符串常量中\本身就是转义字符,因此,只要牵涉到\的,就要用\来描述,因而象\s的TSL常量表述则为’\s’。
|
字符 |
描述 |
|
</td> |
将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。例如,'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '' 匹配 "" 而 "(" 则匹配 "("。 |
|
^ |
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 |
|
$ |
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。 |
|
* |
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等价于{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 <= m。最少匹配 n 次且最多匹配 m 次。如:"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 |
|
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。 | |
|
. |
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 |
|
(pattern) |
匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到。要匹配圆括号字符,请使用 ' |
|
(?:pattern) |
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 |
|
(?=pattern) |
正向预查,在任何未来符合匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
|
(?!pattern) |
负向预查,在任何不匹配未来符合匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 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' & "1"。正则表达式中可以使用ASCII 编码。. |
|
\num |
匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)' 匹配两个连续的相同字符。 |
|
\n |
标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 |
|
\nm |
标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least 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
范例
//‘软’的开始字节是3,下一个字符是‘T’,‘T’的开始字节位置是5
S:= "天软Tinysoft Statistical analysis Language";
return nextCharIndex(s,3);
//返回:5
####### AnsiToUTF8
范例
return AnsiToUTF8('2011 tinysoft天软科技');
// 返回字符串:2011 tinysoft澶╄蒋绉戞妧
####### UTF8ToAnsi
范例
return UTF8ToAnsi ('2011 tinysoft澶╄蒋绉戞妧');
// 返回字符串:2011 tinysoft天软科技
####### CharToByteIndex
范例
//返回第30字符对应的字节位置
//其中‘天软’占有4个字节,其余每个字符占1个字节
S:= "天软Tinysoft Statistical analysis Language";
return CharToByteIndex(s,30);
//返回:32
####### ByteToCharLen
范例
//指定最多字节为30后,查找S中30个字节中有多少个字符,
//其中‘天软’占有4个字节,所以30个字节中,S有28个字符。
S:= "天软Tinysoft Statistical analysis Language";
b1:=ByteToCharLen(S,30);
return b1;
//返回:28
####### AnsiQuotedStr
范例
S:= "天软Tinysoft Statistical analysis Language";
return AnsiQuotedStr(s,"'");
//返回字符串:'天软Tinysoft Statistical analysis Language'
####### AnsiPos
范例
return AnsiPos("tinysoft","2011 tinysoft");
//6
####### AnsiDequotedStr
范例
S:= "'天软Tinysoft Statistical analysis Language'";
return AnsiDequotedStr(s,"'");
//返回字符串:天软Tinysoft Statistical analysis Language
####### CharToByteLen
范例
//在S字符串中取30个字符,统计其所占的字节数。
//其中‘天软’占有4个字节,其余每个字符占1个字节,由此,30个字符占有32个字节
S:= "天软Tinysoft Statistical analysis Language";
b1:=CharToByteLen(S,30);
return b1;
//返回:32
####### CharLength
范例
//第2个字符‘软’的字节数
S:= "天软Tinysoft Statistical analysis Language";
return CharLength(s,2);
//返回:2
####### ByteToCharIndex
范例
//返回第30字节位置时,是第几个字符位置
//其中‘天软’占有4个字节,其余每个字符占1个字节
S:= "天软Tinysoft Statistical analysis Language";
return ByteToCharIndex(s,30);
//返回:28
####### ByteType
范例
//单字节字符‘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
范例
Return booltostrw(2>1);
//返回宽字节字符串:-1
####### UnicodeESC
范例
return echo UnicodeESC('2011 tinysoft天软科技');
//返回字符串:2011%20tinysoft%u5929%u8F6F%u79D1%u6280
####### unUnicodeESC2
范例
return unUnicodeESC2(%%g 2011 tinysoft\u5929\u8F6F\u79D1\u6280%%g);
//返回字符串:2011 tinysoft天软科技
//注:其中\uxxxx编码方式中的\是一个转义字符,所以需要用非转义字符串%%方式进行表达。
####### UnicodeToMultiByte
####### FloattoStrw
范例
return floattostrw(1234.1234);
//输出宽字节字符串:“1234.1234”
####### UnicodeESC2
范例
return UnicodeESC('2011 tinysoft天软科技');
//返回字符串:2011 tinysoft\u5929\u8F6F\u79D1\u6280
####### unUnicodeESCw
范例
Return unUnicodeESCw('2011%20tinysoft%u5929%u8F6F%u79D1%u6280');
//’ 2011 tinysoft天软科技’
####### UnicodetoUTF8
范例
return unicodetoutf8(L'2020 Tinysoft 天软科技');
//返回:2020 Tinysoft 澶╄蒋绉戞妧
####### CurrtoStrw
范例
Return CurrToStrw(23.24);
//输出字符串:"23.24"
####### Inttostrw
范例
s:= inttostrw(2);
return array(ifstring(s),ifwstring(s));
//返回:array(0,1) 说明返回结果串s为宽字节串,而非多字节字符串。
####### MultibyteToUnicode
####### Booltostrw2
范例
Return booltostrw2(2>1);
//返回宽字节字符串:True
####### Strw
范例
v:= strw(123.123,s);
return s;
//返回宽字节字符串:1.23123000000000E+0002
####### Inttohexw
范例
return inttohexw(43,5);
//返回宽字符串字符串:0002B
####### LCMapString
范例
lcmapstring(s,0x0804,0x2000000);//可以把繁体转换为简体字符集
return lcmapstring("亞洲",0x0804,0x2000000);
返回:亚洲
差异说明由于根据windowsAPI的开发,所以Linux中不支持。
####### MultibytetoUnicodew
范例
return multibytetounicodew('2020 Tinysoft 天软科技',936);
//返回宽字节字符串:2020 Tinysoft 天软科技 即L’ 2020 Tinysoft 天软科技’
####### UTF8toUnicode
范例
return UTF8ToUnicode ('2011 tinysoft澶╄蒋绉戞妧');
// 返回双字节字符串:2011 tinysoft天软科技
####### Exportjsonstring
范例
范例01:将天软含中文的字符串转化为json串
s:=stockname('SZ000002');//万 科A
return exportjsonstring(s);
//返回字符串:"\u4E07 \u79D1\uFF21"
范例02:将数组转化为json串
s:=array((1,'a'),('Tinysoft天软','天软科技'));
return exportjsonstring(s);
//返回字符串:[[1,"a"],["Tinysoft\u5929\u8F6F","\u5929\u8F6F\u79D1\u6280"]]
####### unUnicodeESC2w
范例
return unUnicodeESC2w(%%g 2011 tinysoft\u5929\u8F6F\u79D1\u6280%%g);
//返回宽字节字符串:2011 tinysoft天软科技
//注:其中\uxxxx编码方式中的\是一个转义字符,所以需要用非转义字符串%%方式进行表达。
####### unUnicodeESC
范例
ReturnunUnicodeESC('2011%20tinysoft%u5929%u8F6F%u79D1%u6280');
//’ 2011 tinysoft天软科技'‘
####### Ifwstring
范例
范例一:
//判断是否为宽字节字符串类型
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)
范例二:
//对数组第一维度数据进行类型判断
t:=array(L"C",3.56,"A",(1,L"C",3),nil);
return IfWString(t,-1);
//结果:array(1,0,0,0,0)
范例三:
//对数组中每一数据进行类型判断
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串转换成天软字符串
json:=%%g "\u4E07 \u79D1\uFF21"%%g;
//注:在上述语句中,原串存在转义字符,需要用到非转义字符串%%表示该字符串,不能用引号进行表示。
return importjsonstring(json);
//返回字符串:万 科A
范例02:将exportjsonstring转化的json串转为天软数据结构
s:=array((1,'a'),('Tinysoft天软','天软科技'));
json:= exportjsonstring(s);
return importjsonstring(json);
//返回
0
1
1
a
Tinysoft天软
天软科技
范例03:
arr := array(("code": "PFTSDEMO0004", "name":"商品跨期"),
("代码":"PFTSDEMO0003", "name":"债券组合")) ;
return importJsonString(Utf8toAnsi(exportJsonStringUTF8(arr)));
//返回
| code | name | 代码 |
| PFTSDEMO0004 | 商品跨期 | |
| 债券组合 | PFTSDEMO0003 |
范例04:将大的无符号数字转为int64
json:=%%g 4611686018427387904 %%g;
return importjsonstring(json);
####### ExportJsonStringUTF8
范例
范例01:
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
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":"万 科A","date":"2020-09-01","close":27.22},{"StockID":"SZ000002","StockName":"万 科A","date":"2020-09-02","close":27.52}]
####### ExportJSONStringMBCS
范例
范例01:将天软含中文的字符串转化为json串
s:=stockname('SZ000002');//万 科A
return ExportJSONStringMBCS(s);
//返回字符串:"\"万 科A\""
范例02:将数组转化为json串
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
范例
//实际D盘的test.tsl没有改变
return ChangeFileExt("D:\\test.tsl",".txt");
//D:\test.txt
####### ExtractFilePath
范例
return ExtractFilePath("D:\\Tinysoft\\tslweb\\web\\test.tsl");
// D:\Tinysoft\tslweb\web\
####### ExtractFileDir
范例
return ExtractFileDir("D:\\Tinysoft\\tslweb\\web\\test.tsl");
// D:\Tinysoft\tslweb\web
差异说明对于路径的处理,在不同系统中存在差异。如Linux中就没有驱动的概念,因此,在处理带驱动的路径时:
如对于根目录的处理extractfiledir("C:\abc.txt"),Windows中返回”C:\”而Linux中返回”C:”
####### ExtractFileDrive
范例
return ExtractFileDrive("D:\\Tinysoft\\tslweb\\web\\test.tsl");
//输出:D:
####### ExtractFileName
范例
return ExtractFileName("D:\\Tinysoft\\tslweb\\web\\test.tsl");
//输出:test.tsl
####### ExtractFileExt
范例
return ExtractFileExt("D:\\Tinysoft\\tslweb\\web\\test.tsl");
//输出:.tsl
####### ExtractRelativePath
范例
Return ExtractRelativePath("D:\\test.tsl","D:\\Tinysoft\\tslweb\\web\\test.tsl");
//输出:Tinysoft\tslweb\web\test.tsl
差异说明由于Linux系统中无盘符概念,所以不支持该功能。
####### IsPathDelimiter
范例
return IsPathDelimiter("D:\\Tinysoft\\tslweb\\web\\test.tsl",3);
//输出:1
####### IsDelimiter
范例
return IsDelimiter("tinysoft","2011 tinysoft",6);
//输出:1
####### IncludeTrailingPathDelimiter
范例
return IncludeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web");
//输出: D:\Tinysoft\tslweb\web\
差异说明与路径中存在的路径分割符保持一致,当路径中不存在分割符时,则Windows中默认增加"",在Linux中,则默认结路径路径加上”/”结尾。
如在Linux中:return IncludeTrailingPathDelimiter("/Tinysoft");
则返回字符串:/Tinysoft/
####### IncludeTrailingBackslash
范例
return IncludeTrailingBackslash ("D:\\Tinysoft\\tslweb\\web");
//输出: D:\Tinysoft\tslweb\web\
差异说明与路径中存在的路径分割符保持一致,当路径中不存在分割符时,则Windows中默认增加"",在Linux中,则默认结路径路径加上”/”结尾。
如在Linux中:return IncludeTrailingBackslash ("/Tinysoft");
则返回字符串:/Tinysoft/
####### ExcludeTrailingPathDelimiter
范例
return ExcludeTrailingPathDelimiter("D:\\Tinysoft\\tslweb\\web\\");
//输出: D:\Tinysoft\tslweb\web
####### ExcludeTrailingBackslash
范例
return ExcludeTrailingBackslash("D:\\Tinysoft\\tslweb\\web\\");
//输出: D:\Tinysoft\tslweb\web
####### LastDelimiter
范例
return LastDelimiter('\\',"D:\\Tinysoft\\tslweb\\web\\test.tsl");
//输出:23
####### AnsiCompareFileName
范例
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
范例
ReturnSameFileName('index.tsl',"test.tsl");
//输出:0
####### AnsiLowerCaseFileName
范例
return AnsiLowerCaseFileName("TEST.tsl");
//输出:test.tsl
####### AnsiUpperCaseFileName
范例
return AnsiUpperCaseFileName("test.tsl");
//输出:TEST.TSL
其它
####### 内容
- GetPYStringList
- HztoPY
- DataUnitConversion
####### GetPYStringList
范例
sl:=GetPYStringList();
return sl.values("明");
//返回:M
####### HztoPY
范例
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
范例
t1:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':3));
return FieldCount(t1);
//结果:2
####### FieldExist
范例
t1:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':3));
return FieldExist(t1,'b');
//结果:1
####### FieldNames
范例
t1:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':3));return FieldNames(t1);
结果:
####### FieldName
范例
t1:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':3));
return FieldName(t1,0);
//结果:’a’
####### IsTable
范例
t1:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':3));
return IsTable(t1);
//结果:1
####### MagicSetArray
范例
范例01:
a:=array((1,2,3),(4,5,6));
MagicsetArray(a,1,2,10); //a[1][2]:=10
return a;
//结果:
范例02:
a:=array((1,2,3),(4,5,6));
MagicSetArray(a,array(1,2),"b"); //a[1][2]:="b"
return a;
//结果:
参考MagicGetArray
####### NoRecordTable
范例
return NoRecordTable();
//结果:Array()
####### MagicGetArray
范例
范例01:
a:=array((1,2,3),(4,5,6));
return MagicgetArray(a,1,2); //返回a[1][2]的数据
//结果:6
范例02:
a:=array((1,2,3),(4,5,array(3,4)));
return MagicgetArray(a,array(1,2)); //返回a[1][2]的数据
//结果:
参考MagicSetArray
####### RecordExist
范例
t:=array(1,2,12,3,14);
return RecordExist(t,12);
//结果:2
####### RecordExist2
范例
t1:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':3));
return RecordExist2(t1,'b',3);
//结果:2
####### RecordExist3
范例
t:=array(1,2,12,3,14);
return RecordExist3(t,3);
//结果:1
####### FieldNamesOfStrSubscript
范例
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
范例
//把字符串行标变成自然数序列的行标
t:=array("a":(1,2,3),"b":(4,5,6),"c":(7,8,9));
Return StrSubscriptTableToNormal(t,'序号');
把字符串行标
变成自然数序列行标,原行标值放在fn对应的列中:
####### FieldCountOfStrSubscript
范例
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
范例
x := array(9,8,10);
return argmax(x);//2
####### Argmin
范例
x := array(3,1,9,2);
return argmin(x);//1
####### PasswordGen
范例
return rdo2 PasswordGen(8,5,'ts',3);
返回:
数组下标以及长度相关函数
####### 内容
- GetStrIndexNum
- GetStrIndexs
- GetIntIndexs
- GetAllIndexs
- DeleteIndex
- DeleteField
- Length
####### GetStrIndexNum
范例
arr:=array("a1":1,"a2":2,1:3) ;
return GetStrIndexNum(arr);
//输出:2
####### GetStrIndexs
范例
arr:=array("a1":1,"a2":2,"a3":3);
return GetStrIndexs(arr);
//输出:array(“a1”,”a2”,”a3”)。
返回结果:
参考GetIntIndexs GetAllIndexs
####### GetIntIndexs
范例
arr:=array(1:"p1",2:"p2",3:"p3","a4":"p4");
return Getintindexs(arr);
//输出:array(1,2,3)
返回结果:
参考GetStrIndexs GetAllIndexs
####### GetAllIndexs
范例
arr:=array("p1":1,"p2":2,"p3":3);
return GetAllIndexs(arr); //输出:array(“p1”,”p2”,”p3”)
参考GetStrIndexs GetIntIndexs
####### DeleteIndex
范例
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
范例
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
范例
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
范例
t2:=array(('a':2,'c':13),('a':3,'c':33));
RankIt(t2,'c',1);
return t2;
结果:
####### RankIt2
范例
t2:=array(('a':2,'c':13),('a':3,'c':33));
RankIt2(t2,'c','名次',1);
return t2;
结果:
####### RPSIt
范例
获得沪深300的成分股,并计算EndT的涨幅,对涨幅排序后返回其排序百分比。
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
范例
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的成分股,获得涨幅之后,对涨幅进行排名
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
范例
arr:=array(1,6,3);
sortArray(arr);
return arr;
//array(1,3,6)
参考SortTableByField
####### SortTableByField
范例
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
范例
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
范例
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。范例
return SeekPosInArray(4,array(1,2,3,4,5));
//返回:3
####### StockAmount
范例
//平安银行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值,删除该行数据。范例
Tdata:=array(array('time':1,'price':7.78),array('time':2));
DeleteNILValueByField(Tdata,'price');
return tdata;
返回:
####### FilterIn
范例
范例01:
//过滤表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:
//筛选满足过滤集中整行数据的子集
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:
//筛选满足过滤集中指定列数据的子集
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:
//返回符合过滤集中指定列数据的行下标
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:
一维数组的过滤:
return FilterIn(array(1,-5,10,2,10,14,-5),array(2,3,10),nil);
返回结果:array(10,2,10)
####### FilterNotIn
范例用法同FilterIn
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结果:
二维数组中,过滤行运算示例:
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);
返回结果:过滤后保留重复行。
一维数组的过滤:
return FilterNotIn(array(1,-5,10,2,10,14,-5),array(2,3,10),nil);
返回结果:array(1,-5,14,-5)
####### IN1
范例
a:=array(1,2,3,4);
return in1(a,3);
//结果:1
####### searchsorted
范例
//数字插入
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
范例
//实数对比
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
范例
t1:=array(('a':1,'b':4,'c':9),('a':7,'b':8,'c':5));
return DeleteColumnByField(t1,'a;b');
结果:
####### Inserttablebyrno
范例
范例1:
//向一维数组指定位置插入一个字符串’aaa’
t:=43456->43460;
Index:=2;
rData:='aaa';
return InsertTablebyRno(t,Index,rData);
//结果:array(43456,43457,"aaa",43458,43459,43460)
范例2:
//向一维数组第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:
//向二维数组第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:
//向二维数组第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
范例
t:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':4));
return GetValuesByFieldValue(t,'b',4);//返’b’列值为4的所有记录
结果:
####### Arrayextend
范例
a := Letters(1->6);
return arrayextend(a,2,array('d','e'));
返回:array("A","B","d","e","C","D","E","F")
####### Arrayinsert
范例
a := Letters(1->6);
return Arrayinsert(a,2,3);
返回:array("A","B",3,"C","D","E","F")
####### Frameinsert
范例
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
范例
return OutPutTableToCanBeUnderstood(array(1,2,3));
返回:
####### SeperateTable
算法
依据字段SepField排序,若字段不存在则返回空数组。
若分割数大于行数,则每行单独生产一个子表;若分割数小于行数,则按int(行数/分割数)去合并表行数,超出部分单作为一个子表。范例
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
范例
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
范例
//倒置数组
setsysparam(pn_stock(),"SZ000002");
setsysparam(pn_date(),20210601t);
arr:=nday(10,"date",datetostr(sp_time()),"close",close());
return reverse(arr);
返回结果:
####### DescartesJoin
范例
return DescartesJoin(1->3,21->22,3);
返回结果:
####### TableVectorizeArray
范例
t := ones(10,3);
s := array(1,2,3);
return TableVectorizeArray(t,s,'-');
返回结果:
####### DataProcess_MF
算法
四分位法:上边界=中位数+5.2medianof(abs(yi-中位数)),下边界=中位数-5.2medianof(abs(yi-中位数)),其中medianof表示求序列中位数。超出上边界的数改为上边界,低于下边界的数改为下边界。
3倍标准差法:上边界=μ+3σ,下边界=μ-3σ,其中u表示均值,σ表示标准差。超出上边界的数改为上边界,低于下边界的数改为下边界。范例
t:=`array(array(1,100,101,102,103,1000),array(2,200,201,202,203,2000));
return DataProcess_MF(t,'median');
返回:
####### AbnormalData
算法
中位数法:上边界=中位数+5.2medianof(abs(yi-中位数)),下边界=中位数-5.2medianof(abs(yi-中位数)),其中medianof表示求序列中位数。超出上边界的数改为上边界,低于下边界的数改为下边界。
3倍标准差法:上边界=μ+3σ,下边界=μ-3σ,其中u表示均值,σ表示标准差。超出上边界的数改为上边界,低于下边界的数改为下边界。
四分位法:左边界=14位数-1.5*(中位数-14位数),下边界=34位数+1.5*(34位数-中位数),。超出右边界的数改为右边界,低于左边界的数改为左边界。
范例
范例01:返回奇异值的位置及处理后的结果。
t:=array(1,100,101,102,103,1000);
AbnormalData(t,"median",r);
return r;
返回:
其中,0和5为修改的行,1和1000是对应的原值,93.7和109.3是修改后的值
范例02:对源数据列增加一列奇异值处理后的结果
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
范例
return QKsplit_Trailing(20100101T,20110101T);
//结果:
####### QKsplit_Resampling
范例
return QKsplit_Resampling(20100101T,20110101T,cy_year());
//结果:
####### WebFormatToRung
范例
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)*所在行标。范例
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为某一具体分数,μ为平均数,σ为标准差。范例
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
范例
return QKsplit_ToDate(20220704T);
//结果:
####### GroupByFieldValue
算法
依据字段GroupField值进行排序
划分四个区间,小于等于最小值,最小值到最大值之间的每一个步长区间(包括步长末值),临近最大值不足一个步长的区间(包括最大值),大于最大值区间。用FilterTableEx函数来统计指定区间的数量。范例
data:=select * from tradetable datekey 20180903t to 20180904T of 'sz000001' end;
return GroupByFieldValue(data,'close',1,20,0.1);
返回:
####### FilterOneDimEx2
范例
s:=array(1,2,3,4,5,6);
return FilterOneDimEx2(s,4);
//返回:4
####### GroupRankIt
范例
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
范例
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
范例
范例一:
return Histogram(Randn(0,1,1000),array(-3,0.5)->3, '0.00');
//结果:
范例二:
data := randn(0,1,1000,array('a','b'));
return Histogram(data,array(-3,0.5)->3, '0.00');
//结果:
####### FrameGetSubByReg
范例
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
范例
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
范例
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
范例
a := array((3:4),('A':2));
SparseMatFill(a, -1);
return a;// array((3:4,"A":-1),(3:-1,"A":2))
####### ArrayAddGap
范例
a := array('alpha(%)':3);
ArrayAddGap(a,'风险');
a['beta'] := 3;
return a; // array("alpha(%)":3,"-----风险-----":"----------","beta":3)
####### dumies_decode
范例
data :=array(
("申万房地产":1,"申万有色金属":0,"申万银行":0),
("申万房地产":1,"申万有色金属":0,"申万银行":0),
("申万房地产":0,"申万有色金属":1,"申万银行":0),
("申万房地产":0,"申万有色金属":0,"申万银行":1),
("申万房地产":0,"申万有色金属":1,"申万银行":0));
return dumies_decode(data);
//array("申万房地产","申万房地产","申万有色金属","申万银行","申万有色金属")
####### GroupTransformByFunc
范例
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
范例
data := load_dataset_iris();
return frameDrop_duplicates(data,'Species','f','原下标');
####### Field_ReSortCols
范例
范例01
data := TSUT_Data_ZSZF();
colpriority := array('截止日':-1, "中证500":100);
return field_resortcols(data,colpriority);
####### Framedrop_na
范例
data := array((nan,8),(1,3,3));
return frameDrop_Na(data,1,0);
####### Framemerge
范例
范例1:
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
//多字段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
//只更名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
范例
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
范例
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
范例
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
范例
b := array("申万房地产","申万房地产","申万有色金属","申万银行","申万有色金属");
return get_dummies2(b);
//结果:
####### framePivot_table
范例
//指定条件,首列为申万行业,后续列标为日期,按平均值汇总值为涨幅、振幅的的数据透视表数据
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:
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
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
范例
t := array(
('截止日':20210101,'SH000300':1,'SH000301':3),
('截止日':20210102,'SH000300':9,'SH000301':2),
);
ID_names := array('截止日');
return frameMelt(t,'截止日',nil,'代码','得分');
结果:
####### GroupDemeanIt
范例
范例1:
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
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
范例
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
范例
s:=select ['StockID'] as '代码',
["StockName"] as "名称",
['price'] as '收盘'
from markettable datekey 20190101T to 20190201T of 'SZ000001' end;
return ColumnValue(s,'收盘');
返回:
####### GetSubTableByField
范例
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
范例
t2:=array(('a':2,'c':13),('a':3,'c':33),('a':3,'c':33));
return GettopN(t2,2);
结果:
####### FilterTableEx
范例
t2:=array(('a':2,'c':13),('a':3,'c':33));
return FilterTableEx(t2,'c','IN',13,30); //取13<=[ 'c']<=30
结果:
####### ColumnValue2
范例
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
范例
t2:=array(('a':2,'c':13),('a':3,'c':33),('a':3,'c':33));
return GetBottomN(t2,2);
结果:
####### FilterOneDimEx
范例
t:=array(1,2,12,3.7,14);
return FilterOneDimEx(t,'IN',2,7);
结果:
####### GetDistinctValue
范例
t2:=array(('a':2,'c':13),('a':3,'c':33),('a':3,'c':43),('a':5,'c':53));
return GetDistinctValue(t2,'a');
结果:
####### GetMiddleN
范例
t2:=array(('a':2,'c':13),('a':3,'c':33),('a':4,'c':33),('a':5,'c':33));
return GetMiddleN(t2,2,3);
结果:
####### FilterTable
范例
// 'SZ002664'在20211231时的分红送股数据
setsysparam(pn_stock(),'SZ002664');
return FilterTable(Infoarray(18),20211231);
//结果:
####### GetSubField
范例
a:=array(('a':8,'b':7),('a':6,'b':9));
return GetSubField(a,'a');// 从a表中取第’a列’
结果:
####### GetSubTable
范例
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
范例
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
范例
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
范例
t1 := array(1,2,3,4);
t2 := array(3,4,5,6);
return FilterIntersectionPart2(t1,t2,'IN');//t1 与t2的交集
结果:
####### DistinctStr
范例
a:=array('w','d','f','d','e');
return DistinctStr(a);//保留不相同的,相同的只保留一个
结果:
####### IntersectionPart
范例
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
范例
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
范例
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
范例
t1:=array(('a':1,'b':4,'c':9),('a':7,'b':5,'c':5));
return GeoMeanByColumn(t1,'b');
//结果:4.47
####### SumValueByColumn
范例
t1:=array(('a':1,'b':4,'c':9),('a':7,'b':8,'c':5));
return SumValueByColumn(t1,'b');
//结果:12
####### AverageValueByColumn
范例
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
范例
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
范例
t2:=array(('a':2,'c':13),('a':3,'c':33),('a':3,'c':43),('a':5,'c':53));
return MedianByColumn(t2,'c');
//结果:38
####### VarByColumn
范例
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
范例
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
范例
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
范例
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
范例
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
范例
t2:=array(('a':2,'c':13),('a':3,'c':33),('a':3,'c':43),('a':5,'c':53));
return MaxValueByColumn(t2,'c');
//结果:53
####### DevsqByColumn
范例
t1:=array(('a':1,'b':4,'c':9),('a':7,'b':5,'c':5));
return DevsqByColumn(t1,'b');
//结果:0.5
####### KurtByColumn
范例
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
范例
t2:=array(('a':2,'c':13),('a':3,'c':33),('a':3,'c':43),('a':5,'c':53));
return SumValueByRow(t2,2);
//结果:46
####### HarMeanByColumn
范例
t1:=array(('a':1,'b':4,'c':9),('a':7,'b':5,'c':5));
return HarMeanByColumn(t1,'b');
//结果:4.44
####### StatByColumn
范例
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
范例
t1:=array(('a':1,'b':4,'c':9),('a':7,'b':8,'c':5));
return AverageByColumn(t1,'b');
//结果:6
####### StdevByColumn
范例
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
范例
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:
load_dataset_iris(data);
return Describe(data);
范例02:
return Describe(randn(0,1,1000),array(0.05,0.1)->0.95);
####### Framecorrel
范例
data := TSUT_Data_ZSZF()[:,1:];
return frameCorrel(data);
####### Framecov
范例
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
范例
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
范例
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
load_dataset_iris(data);
return SimpleDescribe(data);
范例02
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
范例
s:=nday(10,'time',datetostr(sp_time()),'close',close());
return NormalTabletoStrSubscript(s,'time');
把 time列的数据变为行标
---变为--》
####### RenameField
范例
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
范例
//给随机数组批量加后缀
T:=rand(10,10);
Suffix:= "@A";
Ifcopy:=True;
return Field_AddSuffix(t,Suffix,Ifcopy);
//结果:
####### RenameFieldByFormat
范例
//给随机数组批量加后缀
T:=rand(10,10);
Suffix:= '%s'$"@A";
Ifcopy:=True;
return RenameFieldByFormat(t,Suffix,Ifcopy);
//结果:
####### Field_AddPrefix
范例
//给随机数组批量加前缀
T:=rand(10,10);
Suffix:= "A";
Ifcopy:=True;
return Field_AddPrefix(t,Suffix,Ifcopy);
//结果:
####### ReIndex
范例
//修改数字列名数组为字符串列名数组,即将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
范例
实现:将指定列下标转为数组的行下标--可用于快速建立哈希表
setsysparam(pn_stock(),"SH000001");
setsysparam(pn_date(),20240822T);
t:=nday(10,'time',datetostr(sp_time()),'close',close());
return reindexcopy(t,t[:,"time"]);
转化结果:
====》转变为:
####### Reshape
范例
//默认拉伸为一个一维数组
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
范例
//将矩阵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
范例
//根据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
范例
//创建m*m稀疏单位矩阵
A:=speye(4);
return A;
//结果:
####### Sprand1
范例
//创建与矩阵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
范例
//创建10*10稀疏均匀随机矩阵
A:=sprand2(10,10,0.3);
return A;
//结果:
####### Sprandn1
范例
//创建与矩阵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
范例
//创建10*10稀疏正态随机矩阵
A:=sprandn2(10,10,0.2);
return A;
//结果:
####### Sprandsym1
范例
//创建与矩阵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
范例
//创建10*10对称稀疏正态随机矩阵
A:=sprandnsym2(10,0.2);
return A;
//结果:
####### Sparsefull
范例
//将S由稀疏格式矩阵转化为5*5满矩阵格式
S:=array(0:(0:1),2:(2:3),3:(3:4));
return sparsefull(S,5,5);
//结果:
####### Spones
范例
//将S中非零元素替换为1
S:=array(0:(0:1),2:(2:3),3:(3:4));
return spones(S,1);
//结果:
####### Spnnz
范例
//稀疏正态随机矩阵A中非零元素数目
A:=Sprandn2(5,5,0.2);
return spnnz(A); //返回4(随机)
####### Spnonzeros
范例
//提取稀疏正态随机矩阵A中非零元素
A:=Sprandn2(5,5,0.2);
return Spnonzeros(A);
//结果:
####### Ifsparse
范例
//判断矩阵S是否为稀疏矩阵
S:=Array(3:2,"B":3);
return ifsparse(S); //返回0
####### Spdiags1
范例
//提取矩阵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
范例
//提取矩阵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
范例
//将矩阵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
范例
//根据对角矩阵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
范例
//返回板块申万数字媒体机构持股情况及变化
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
范例
//指定条件,行标为日期,列标为名称,值为收盘价、涨幅、振幅的数据透视表
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
范例
//指定条件,行标为申万行业,列标为日期,按平均值汇总值为涨幅、振幅的的数据透视表数据
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
范例
//生成数据表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
范例
//生成数据表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
范例
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
范例
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
范例
//生成数据表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
范例
t:=array('a','c','d');
return QuickRecordExist(t,'d');
//结果:2
####### RotateTable
范例
t:=array(('a':1,'b':4),('a':7,'b':8),('a':2,'b':4));
return RotateTable(t);
结果:
####### NonIntersectionPart
范例
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为空或指定的列名不为“平均”或“总计”,那么,“平均”或“总计”字符串存放在第一列最后一行,其他列的统计结果存放在最后一行。范例
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为空或指定的列名不为“平均”,那么,“平均”字符串存放在第一列最后一行,其他列的统计结果存放在对应列最后一行。范例
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为空或指定的列名不为“总计”,那么,“总计”字符串存放在第一列最后一行,其他列的统计结果存放在对应列最后一行。范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
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
范例
//按照分红送股列展开数据
data:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),"名称",
CurrentStockName(),"分红送股",infoarray(18));
return ExpandTable(data,"分红送股");
//结果:
数组下标
####### 内容
- frameIndex_filter
- frameIndex_getilocDZ
####### frameIndex_filter
范例
范例01
//选择 "回测周期":"因子分类"
allcols :=
array("回测名称","回测周期","分组个数","因子名称","因子分类","IC分析@IC均值","IC分析@ICIR","IC分析@IC胜率(%)","回归分析@平均收益(%)","回归分析@T值","分组绝对收益(多头)@收益(%)","分组绝对收益(多头)@波动率(%)","分组绝对收益(多头)@胜率(%)","分组相对收益(多头)@收益(%)","分组相对收益(多头)@波动率(%)","分组相对收益(多头)@胜率(%)","分组相对收益(多头)@T值","分组多空收益@收益(%)","分组多空收益@波动率(%)","分组多空收益@胜率(%)","分组多空收益@T值","创建人","因子回测ID","收藏人数","是否已收藏");
return frameIndex_filter(allcols,array('回测周期','因子分类'),1);
范例02
//选择 IC分析 开头的
return frameIndex_filter(allcols,'^IC分析',3);
范例03
//选择 IC分析 开头,或者 因子 开头的
return frameIndex_filter(allcols,array('^IC分析','^因子'),3);
####### frameIndex_getilocDZ
范例
return frameIndex_getilocDZ(array('成长','估值','动量'));