TGDZCalc by LabTalk in Origin(39th)
一直以来认为Origin是个数理计算的工具,没有考虑到它内带了编程能力。于是研究了一下这个Labtalk,鼓捣的半天也可以用来写这个逻辑。
点击查看代码
function int CalcBaseYear(int year){
if (year==0) {return 0}
int b=0;
if(year<0)
{b=-57}
else
{b=4};
for(;b>year; b -= 60) {};
for(;b+60<=year;b += 60) {};
return b;
}
function string YearToTGDZ(int year) {
strTG$="甲乙丙丁戊已庚辛壬癸";
strDZ$="子丑寅卯辰巳午未申酉戌亥";
if (year==0) {return ""}
if (year>0) {year=year-4}
else {year=year-3}
for ( ;year< 0; year=year+60 ) {;};
ti=mod(year,10)+1;
di=mod(year,12)+1;
string t$=mid(strTG$,ti,1)$;
string d$=mid(strDZ$,di,1)$;
return t$+d$;
};
function int TGDZToyear(string tgdz$, int baseYear){
if(len(tgdz$)==0) {return ""};
tg$=mid(tgdz$,1,1)$;
dz$=mid(tgdz$,2,1)$;
strTG$="甲乙丙丁戊已庚辛壬癸";
strDZ$="子丑寅卯辰巳午未申酉戌亥";
int ti=find(strTG$,tg$); //1-based
int di=find(strDZ$,dz$); //1-based
int m=0;
if (ti>di) {m=ti-di}
else {m=ti-di+12};
return baseYear+m*5+ti-1;
};
//test
for (int y=1900;y<=2100; y++) {
int by=CalcBaseYear(y);
string tmp$=YearToTGDZ(y)$;
int rY=TGDZToYear(tmp$,by);
y=; by=; tmp$=; rY=;
type "=========="
}
//没有一个正式的println函数感觉很不顺手。另外某些地方解释器存在Bug,在Code Builder中调试也感觉结结巴巴各种不流畅,出错看不到原因,命令看不到结果,差劲。
效果图是在脚本窗口中运行后抓屏的。


浙公网安备 33010602011771号