hpstring.java
来自「一个简单的visio程序。」· Java 代码 · 共 2,075 行 · 第 1/5 页
JAVA
2,075 行
specified.
*string1 String expression being searched.
*string2 String expression sought.
*compare Specifies the type of string comparison. The compare argument can
be omitted, it can be 0 or 1, or it can be the value of the
CollatingOrder property of a Field object. Specify 0 (default) to
perform a binary comparison. Specify 1 to perform a textual,
case-insensitive comparison. Specify the return value of the
CollatingOrder property of a Field object if you want to sort or
compare values from a database in the same way the database itself
would. If compare is Null, an error occurs. The start argument is
required if compare is specified. If compare is omitted, the Option
Compare setting determines the type of comparison.
*/
public static Variant INSTR(Variant varstr1, Variant varstr2) throws HpException
{
VLong varstart = new VLong( (int)1 );
VInt varcompare = new VInt( (short)0 );
return INSTR( varstart, varstr1,varstr2,varcompare );
}
/*--- FUNCTION: InStr(start,string,string) 3 ---*/
public static Variant INSTR(Variant varstart , Variant varstr1, Variant varstr2) throws HpException
{
VInt varcompare = new VInt( (short)0 );
return INSTR( varstart, varstr1,varstr2,varcompare);
}
/*--- FUNCTION: INSTR(start,string,string ,compare) 4 ---*/
public static Variant INSTR(Variant varstart, Variant varstr, Variant varsubstr, Variant varcompare)
throws HpException
{
int result=0 ;
int type1, type2;
String str, substr;
type1 = varstr.getType();
if( type1==Variant.V_NULL )
return new VNull();
else
str = get_str( varstr);
type2 = varsubstr.getType();
if( type2==Variant.V_VAR )
type2 = varsubstr.getType();
if( type2==Variant.V_NULL )
return new VNull();
else
{
substr = get_str( varsubstr);
if( substr==null )
throw new HpException(94, "Invalid use of null");
}
int start = dbl2int( get_db( varstart ) );
if (start <= 0 || start > 65535)
throw new HpException(95,"Invalid procedure call");
int compare = dbl2int( get_db( varcompare ) );
if( compare<0 || compare>=2 )
throw new HpException(95,"Invalid procedure call");
if( start > str.length() )
{
result = 0;
}
else
{
if( compare<0 || compare>=2 )
throw new HpException(95, "Invalid procedure call");
else if( compare!=0 )
{
str = str.toLowerCase();
substr = substr.toLowerCase();
}
result = str.indexOf(substr,(int)start-1) + 1;
}
return new VLong(result);
}
/**
*Len(string | varname)
*Returns the number of characters in a string or the number of bytes required
*to store a variable.
*string Any valid string expression. If string contains Null, Null is returned.
*varname Any valid variable name. If varname contains Null, Null is returned.
If varname is a Variant, Len treats it the same as a String and always
returns the number of characters it contains.
*Note LenB is provided for use with byte data contained in a string. Instead
of returning the number of characters in a string, LenB returns the
number of bytes used to represent that string.
*/
public static Variant LEN(Variant variant) throws HpException
{
int type = variant.getType();
int leng;
if( type==Variant.V_NULL )
return new VNull();
else
{
leng = Length( variant );
return new VLong(leng);
}
}
static int Length( Variant variant ) throws HpException
{
int length=0;
int type;
String tmps,str ,s;
//Wrapper obj;
type = variant.getType();
switch( type )
{
case Variant.V_FIX_STR:
length = ((VString)variant).getLength();
break;
case Variant.V_VAR:
type = variant.getType();
switch( type )
{
case Variant.V_EMPTY:
case Variant.V_BOL:
case Variant.V_BYTE:
case Variant.V_STR:
case Variant.V_INT:
case Variant.V_SINGLE:
case Variant.V_LONG:
case Variant.V_CURR:
case Variant.V_DBL:
str = variant.strValue();
length = str.length();
break;
case Variant.V_DATE:
str = variant.strValue();//variant.dateValue();
length = str.length();
break;
case Variant.V_OBJ:
//obj = variant.getObject();
//if( obj==null )
// throw new HcException( 91, "Object variable or With block variable not set");
s = ((VObject)variant).getDefaultProperty().strValue();
length = s.length();
length = 0;
break;
case Variant.V_ARR:
int maxelem;
int arrtype;
VArray array = variant.getArray();
maxelem = array.getLength();
arrtype = array.getType();
switch( arrtype )
{
case Variant.V_EMPTY:
tmps = variant.strValue();
length = tmps.length() * maxelem;
break;
case Variant.V_BOL:
length = 2 * maxelem;
break;
case Variant.V_BYTE:
length = 1 * maxelem;
break;
case Variant.V_STR:
str = variant.strValue();
length = str.length() * maxelem;
break;
case Variant.V_INT:
length = 2 * maxelem;
break;
case Variant.V_SINGLE:
case Variant.V_LONG:
length = 4 * maxelem;
break;
case Variant.V_DATE:
str = variant.strValue();//variant.dateValue();
length = str.length();
break;
case Variant.V_CURR:
case Variant.V_DBL:
length = 8 * maxelem;
break;
case Variant.V_OBJ:
//obj = variant.getObject();
//if( obj==null )
// throw new HcException( 91, "Object variable or With block variable not set");
s = ((VObject)variant).getDefaultProperty().strValue();
length = s.length() * maxelem;
length = 0;
break;
default:
throw new HpException(13,"Type mismatch");
}
}//end of Variant.V_VAR:
break;
case Variant.V_EMPTY:
tmps = variant.strValue();
length = tmps.length();
break;
case Variant.V_BOL:
length = 2;
break;
case Variant.V_BYTE:
length = 1;
break;
case Variant.V_STR:
str = variant.strValue();
length = str.length();
break;
case Variant.V_INT:
length = 2;
break;
case Variant.V_SINGLE:
case Variant.V_LONG:
length = 4;
break;
case Variant.V_DATE:
length = 8;
break;
case Variant.V_CURR:
length = 8;
break;
case Variant.V_DBL:
Double dd = new Double(variant.dblValue() );
String dblstr = dd.toString();
int ePos = dblstr.indexOf('E' );
if( ePos!=-1 )
{
String str1 = dblstr.substring(0,ePos);
length = str1.length()-1;
}
else
length = 8;
break;
case Variant.V_OBJ:
//obj = variant.getObject();
//if( obj==null )
// throw new HcException( 91, "Object variable or With block variable not set");
s = ((VObject)variant).getDefaultProperty().strValue();
length = s.length();
length = 0;
break;
case Variant.V_ARR:
int maxelem;
int arrtype;
VArray array = variant.getArray();
maxelem = array.getLength();
arrtype = array.getType();
switch( arrtype )
{
case Variant.V_EMPTY:
tmps = variant.strValue();
length = tmps.length() * maxelem;
break;
case Variant.V_BOL:
length = 2 * maxelem;
break;
case Variant.V_BYTE:
length = 1 * maxelem;
break;
case Variant.V_FIX_STR:
length = variant.getLength() * maxelem;
break;
case Variant.V_STR:
str = variant.strValue();
length = str.length() * maxelem;
break;
case Variant.V_INT:
length = 2 * maxelem;
break;
case Variant.V_SINGLE:
case Variant.V_LONG:
length = 4 * maxelem;
break;
case Variant.V_DATE:
case Variant.V_CURR:
case Variant.V_DBL:
length = 8 * maxelem;
break;
case Variant.V_OBJ:
//obj = variant.getObject();
//if( obj==null )
// throw new HcException( 91, "Object variable or With block variable not set");
s = ((VObject)variant).getDefaultProperty().strValue();
length = s.length() * maxelem;
length = 0;
break;
case Variant.V_VAR:
//length = 16 * maxelem;
//throw error when compile
break;
default:
throw new HpException(13,"Type mismatch");
}//end of Variant.V_ARR:
break;
case Variant.V_UDT:
int fieldnum,total=0;
String fdname;
Class cls = ((Object)variant).getClass();
java.lang.reflect.Field[] fd = cls.getFields();
fieldnum = fd.length;
for( int i =0 ; i<fieldnum ; i++ )
{
fdname = fd[i].getName();
if( fdname.equalsIgnoreCase("Variant") )
{
type = variant.getType();
if( type==Variant.V_ARR )
total += 16 * Length( variant ) ;
else
total += 16;
}
else if(fdname.equalsIgnoreCase("VString") )
{
total += 4;
}
else if(fdname.equalsIgnoreCase("fixedString") )
{
total += ((VString)variant).getLength();
}
else if(fdname.equalsIgnoreCase("VArray") )
{
VArray arr = variant.getArray();
maxelem = arr.getLength();
type = arr.getType();
switch( type )
{
case Variant.V_EMPTY:
tmps = variant.strValue();
total += tmps.length() * maxelem;
break;
case Variant.V_BOL:
total += 2 * maxelem;
break;
case Variant.V_BYTE:
total += 1 * maxelem;
break;
case Variant.V_STR:
total += 4 * maxelem;
break;
case Variant.V_FIX_STR:
total += ((VString)variant).getLength() * maxelem;
break;
case Variant.V_INT:
total += 2 * maxelem;
break;
case Variant.V_SINGLE:
case Variant.V_LONG:
total += 4 * maxelem;
break;
case Variant.V_DATE:
case Variant.V_CURR:
case Variant.V_DBL:
total += 8 * maxelem;
break;
case Variant.V_OBJ:
//obj = variant.getObject();
//if( obj==null )
// throw new HpException( 91, "Object variable or With block variable not set");
s = ((VObject)variant).getDefaultProperty().strValue();
total += s.length() * maxelem;
break;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?