?? sp_function.java
字號:
import java.util.*;
/**
* 內部函數處理類
*
* @author 林玉東.煙臺
* @version 1.0 11/01 2003
*/
public class SP_Function implements SP_Const
{
//
private SP_Parser parser;
private SP_SimpleParseUI impl;
//
public SP_Function(SP_Parser parser,SP_SimpleParseUI impl)
{
this.parser=parser;
this.impl=impl;
}
/**************/
//內部函數分類 :數學/日期/字符串
private static String[] funcs={
"acos","asin","atan","cos","sin","tan",
"exp","log","pow","abs","round","sqrt",
"trim","substring","equals",
"getUnixSeconds","getDateSeconds","getNowDate","getNowTime","getSomeDate","getSomeTime",
"getYear","getMonth","getDay","getHour","getMinute","getSecond",
"getTimerDate","getDate","getTime","getSDate"
};
private static HashMap systemFunctions=new HashMap(50); //元素個數的1.5倍
static{
for(int i=0;i<funcs.length;i++)
systemFunctions.put(funcs[i],funcs[i]);
}
static public boolean isSysFunction(String name)
{
return systemFunctions.containsKey(name);
}
/**************/
public void proFunction(String fname,SP_RunUnit src)
throws Exception
{
SP_Scanner scanner=parser.getScanner();
scanner.readOneWord();
if(scanner.curWordType!=WT_LPAREN)
throw new Exception("缺少( !");
//
if(fname.equals("acos")){
parser.proMathExpression1(src);
src.value1=(float)Math.acos(src.value1);
src.type=WT_FloatConst;
}
else if(fname.equals("asin")){
parser.proMathExpression1(src);
src.value1=(float)Math.asin(src.value1);
src.type=WT_FloatConst;
}
else if(fname.equals("atan")){
parser.proMathExpression1(src);
src.value1=(float)Math.atan(src.value1);
src.type=WT_FloatConst;
}
else if(fname.equals("cos")){
parser.proMathExpression1(src);
src.value1=(float)Math.cos(src.value1);
src.type=WT_FloatConst;
}
else if(fname.equals("sin")){
parser.proMathExpression1(src);
src.value1=(float)Math.sin(src.value1);
src.type=WT_FloatConst;
}
else if(fname.equals("tan")){
parser.proMathExpression1(src);
src.value1=(float)Math.tan(src.value1);
src.type=WT_FloatConst;
}
else if(fname.equals("exp")){
parser.proMathExpression1(src);
src.value1=(float)Math.exp(src.value1);
}
else if(fname.equals("log")){
parser.proMathExpression1(src);
src.value1=(float)Math.log(src.value1);
}
else if(fname.equals("pow")){
parser.proMathExpression1(src);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit targ=new SP_RunUnit();
parser.proMathExpression1(targ);
src.value1=(float)Math.pow(src.value1,(int)targ.value1);
}
else if(fname.equals("abs")){
parser.proMathExpression1(src);
src.value1=(float)Math.abs(src.value1);
}
else if(fname.equals("round")){
parser.proMathExpression1(src);
src.value1=(float)Math.round(src.value1);
}
else if(fname.equals("sqrt")){
parser.proMathExpression1(src);
src.value1=(float)Math.sqrt(src.value1);
}
else if(fname.equals("trim")){
parser.proMathExpression1(src);
src.set(src.value2.trim(),WT_StringConst);
}
else if(fname.equals("equals")){
SP_RunUnit str1=new SP_RunUnit();
parser.proMathExpression1(str1);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit str2=new SP_RunUnit();
parser.proMathExpression1(str2);
src.value1=str1.value2.equals(str2.value2)?1:0;
}
else if(fname.equals("substring")){
SP_RunUnit str=new SP_RunUnit();
parser.proMathExpression1(str);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit ind1=new SP_RunUnit();
parser.proMathExpression1(ind1);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit ind2=new SP_RunUnit();
parser.proMathExpression1(ind2);
//
String val=str.value2.substring((int)ind1.value1,(int)ind2.value1);
src.set(val,WT_StringConst);
}
else if(fname.equalsIgnoreCase("getUnixSeconds")){
//
parser.proMathExpression1(src);
Calendar date = Calendar.getInstance();
int y=date.get(Calendar.YEAR);
int m=date.get(Calendar.MONTH);
int d=date.get(Calendar.DAY_OF_MONTH);
date.set(y,m,d,0,0,0);
date.setTime(new Date(date.getTime().getTime()+(long)(src.value1)*24*3600*1000));
src.set(String.valueOf(date.getTime().getTime()/1000),WT_StringConst);
}
else if(fname.equalsIgnoreCase("getDateSeconds")){
SP_RunUnit year=new SP_RunUnit();
parser.proMathExpression1(year);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit mon=new SP_RunUnit();
parser.proMathExpression1(mon);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit day=new SP_RunUnit();
parser.proMathExpression1(day);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit hour=new SP_RunUnit();
parser.proMathExpression1(hour);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit min=new SP_RunUnit();
parser.proMathExpression1(min);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
SP_RunUnit sec=new SP_RunUnit();
parser.proMathExpression1(sec);
Calendar date = Calendar.getInstance();
date.set((int)year.value1,(int)mon.value1-1,(int)day.value1,(int)hour.value1,(int)min.value1,(int)sec.value1);
src.set(String.valueOf(date.getTime().getTime()/1000),WT_IntegerConst);
}
else if(fname.equalsIgnoreCase("getNowDate")){
scanner.readOneWord();
if(scanner.curWordType!=WT_StringConst)
throw new Exception("缺少日期類型!");
Calendar date = Calendar.getInstance();
int dd=0;
if(scanner.curWordValue.equals("year"))
dd=date.get(date.YEAR);
else if(scanner.curWordValue.equals("mon"))
dd=date.get(date.MONTH)+1;
else if(scanner.curWordValue.equals("day"))
dd=date.get(date.DAY_OF_MONTH);
else
throw new Exception("不識別的日期類型!");
src.set(String.valueOf(dd),WT_IntegerConst);
}
else if(fname.equalsIgnoreCase("getNowTime")){
scanner.readOneWord();
if(scanner.curWordType!=WT_StringConst)
throw new Exception("缺少時間類型!");
Calendar date = Calendar.getInstance();
int dd=0;
if(scanner.curWordValue.equals("hour"))
dd=date.get(date.HOUR_OF_DAY);
else if(scanner.curWordValue.equals("min"))
dd=date.get(date.MINUTE);
else if(scanner.curWordValue.equals("second"))
dd=date.get(date.SECOND);
else
throw new Exception("不識別的時間類型!");
src.set(String.valueOf(dd),WT_IntegerConst);
}
else if(fname.equalsIgnoreCase("getSomeDate")){
SP_RunUnit seconds=new SP_RunUnit();
parser.proMathExpression1(seconds);
scanner.readOneWord();
if(scanner.curWordType!=WT_COMMA)
throw new Exception("缺少, !");
scanner.readOneWord();
if(scanner.curWordType!=WT_StringConst)
throw new Exception("缺少日期類型!");
//
Calendar date = Calendar.getInstance();
date.setTime(new Date((long)(seconds.value1)*1000));
int y=date.get(Calendar.YEAR);
int m=date.get(Calendar.MONTH)+1;
int d=date.get(Calendar.DAY_OF_MONTH);
/*
int h=date.get(Calendar.HOUR);
int m=date.get(Calendar.MINUTE);
int s=date.get(Calendar.SECOND);
int dd=0;
String dates=null;
if(scanner.curWordValue.equals("year"))
dd=year;
else if(scanner.curWordValue.equals("mon"))
dd=mon;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -