hpstring.java
来自「一个简单的visio程序。」· Java 代码 · 共 2,075 行 · 第 1/5 页
JAVA
2,075 行
{
int type = varstr.getType();
if( type == Variant.V_NULL)
return new VNull();
else
{
String s = RIGHT$(varstr, varlen);
return new VString(s);
}
}
/**
*StrComp(string1, string2[, compare])
*if string1 is less than string2 return -1,if string1 is equal to string2
*return 0,if string1 is greater than string2 return 1,if string1 or string2 is
*Null return Null.
*string1,string2 is any valid string expression
*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
comparison. Specify the return value of the CollatingOrder property
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.
If compare is omitted, the Option Compare setting determines the
type of comparison.
*/
public static Variant STRCOMP(Variant varstr1, Variant varstr2) throws HpException
{
String str1, str2;
short rs ;
int type1 = varstr1.getType();
if( type1==Variant.V_NULL )
return new VNull();
else
str1 = get_str( varstr1);
int type2 = varstr2.getType();
if( type2==Variant.V_NULL )
return new VNull();
else
str2 = get_str( varstr2);
rs = (short)str1.compareTo(str2) ;
if(rs>0)
rs = 1;
else if( rs<0)
rs = -1;
return new VInt(rs);
}
/*--- FUNCTION: StrComp(string1,string2,compare) ---*/
public static Variant STRCOMP(Variant varstr1, Variant varstr2, Variant varcompare)
throws HpException
{
String str1,str2;
short result=0 ;
int type1, type2;
type1 = varstr1.getType();
if( type1==Variant.V_NULL )
return new VNull();
else
{
str1 = get_str( varstr1);
}
type2 = varstr2.getType();
if( type2==Variant.V_NULL )
return new VNull();
else
{
str2 = get_str( varstr2);
}
int compare = dbl2int( get_db(varcompare) );
if( compare == 0 )
{
result = (short)str1.compareTo(str2);
if(result>0)
result = 1;
else if( result<0)
result = -1;
}
else if( compare==1 )
{
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
result = (short)str1.compareTo(str2);
if(result>0)
result = 1;
else if( result<0)
result = -1;
}
else
throw new HpException( 95,"Invalid procedure call");
return new VInt(result);
}
/**
*String[$](number, character)
*Returns a repeating character string of the length specified. String$()
*return a string,String() return a variant string.
*number Length of the returned string. If number contains Null, Null is
returned.
*character Character code specifying the character or string expression whose
first character is used to build the return string. If character
contains Null, Null is returned.if number for character greater than
255,String converts the number to a valid character code using the
formula: character Mod 256
*/
public static String STRING$(Variant varnumber, Variant varstr) throws HpException
{
StringBuffer st=null;
String str;
int charcode=0;
int number = dbl2int ( get_db(varnumber) );
if (number < 0 || number >=2147483647)
throw new HpException(95,"Invalid procedure call");
int type = varstr.getType();
switch( type )
{
case Variant.V_OBJ:
// Wrapper obj = varstr.getObject();
// if( obj==null )
// throw new HpException( 91, "Object variable or With block variable not set");
charcode = ((VObject)varstr).intValue();
break;
case Variant.V_BOL:
case Variant.V_BYTE:
case Variant.V_INT:
case Variant.V_LONG:
case Variant.V_SINGLE:
case Variant.V_DBL:
case Variant.V_CURR:
case Variant.V_DATE:
charcode = (int)Math.round( varstr.dblValue() );
break;
case Variant.V_FIX_STR:
fixedString fix_str = ((VString)varstr).getfixedLenStrValue();
str = fix_str.strValue();
if (number < 0 || str == null)
throw new HpException(8, "Illegal function call");
if (number > 2147483647)
throw new HpException(14, "Out of string space");
if (number == 0 || str.length() == 0 )
{
st = new StringBuffer("");
}
else
{
st = new StringBuffer(number);
for (int i = 0; i < number; i++)
st.append(str.charAt(0));
}
break;
case Variant.V_EMPTY:
case Variant.V_STR:
str = varstr.strValue();
if (number < 0 || str == null)
throw new HpException(8, "Illegal function call");
if (number > 2147483647)
throw new HpException(14, "Out of string space");
if (number == 0 || str.length() == 0 )
{
st = new StringBuffer("");
}
else
{
st = new StringBuffer(number);
for (int i = 0; i < number; i++)
st.append(str.charAt(0));
}
break;
case Variant.V_NULL:
throw new HpException(94, "Invalid use of null");
default:
throw new HpException(13,"Type mismatch");
} //end of switch
if( type!=Variant.V_STR && type!=Variant.V_FIX_STR && type!=Variant.V_EMPTY)
{
int code=0;
char chr;
if(charcode > 32767 || charcode < -32768)
throw new HpException(6, "Overflow");
if (charcode >= 0)
code = charcode % 256;
else
code = 256 - Math.abs(charcode);
chr = (char)code;
if (number == 0)
{
st = new StringBuffer("");
}
else
{
st = new StringBuffer(number);
for (int i = 0; i < number; i++)
st.append(chr);
}
} // end of type!=Variant.V_STR || Variant.V_NULL
return st.toString();
}
/*--- FUNCTION: String(long,string) ---*/
public static Variant STRING(Variant varnumber, Variant varstr) throws HpException
{
if( varstr.getType()==Variant.V_NULL )
return new VNull();
else
return new VString( STRING$(varnumber,varstr) );
}
/**
*Mid(stringvar, start[, length]) = string
*Replaces a specified number of characters in a string variable with characters
from another string.
*stringvar Name of string variable to modify.
*start Character position in stringvar where the replacement of text begins.
*length Number of characters to replace. If omitted, all of string is used.
*string String expression that replaces part of stringvar.
*Remarks
The number of characters replaced is always less than or equal to the number
of characters in stringvar.
*Note
MidB(stringvar, start[, length]) = string is provided for use with byte data
contained in a string. In the MidB statement, start specifies the byte
position within stringvar where replacement begins and length specifies the
numbers of bytes to replace.
*/
public static void SMID( Variant string, Variant varstart, Variant replacestr)
throws HpException
{
String str , repstr,result="";
int pos,str_len, repstr_len;
str = get_str(string);
if( str.compareTo("")==0 )
throw new HpException( 95,"Invalid procedure call");
str_len = str.length();
repstr = get_str(replacestr);
if( repstr==null )
throw new HpException(94, "Invalid use of null");
repstr_len = repstr.length();
pos = (int)Math.round( varstart.dblValue() );
if( pos<=0 || pos>str_len)
throw new HpException(95,"Invalid procedure call");
if( repstr_len>=str_len )
result = str.substring(0,pos-1) + repstr.substring(0, str_len-pos+1 );
else
{
int total_len = pos + repstr_len;
if( total_len-1<=str_len )
result = str.substring(0,pos-1) + repstr + str.substring( pos-1 + repstr_len );
else
result = str.substring(0,pos-1) + repstr.substring(0,total_len-str_len-1 );
}
//string.setVariantStr(result);
//string.setVariantType(Variant.V_STR );
}
/*--- STATEMENT: Mid( string, start,length,replacestr ) ---*/
public static void SMID( Variant string, Variant start,Variant leng,
Variant replacestr ) throws HpException
{
String str , repstr,result="";
int pos,str_len, repstr_len, len , total_len;
str = get_str(string);
str_len = str.length();
repstr = get_str(replacestr);
repstr_len = repstr.length();
pos = dbl2int( get_db(start) );
if( pos<=0 || pos>str_len)
throw new HpException(95,"Invalid procedure call");
len = dbl2int( get_db(leng) );
if( len<0 )
throw new HpException(95,"Invalid procedure call");
if(pos<=0 || pos>str_len )
throw new HpException( 95, "Invalid procedure call");
if( repstr_len>=str_len )
{
if( len>=repstr_len )
result = repstr.substring(0, str_len);
else
{
repstr = repstr.substring(0,len);
repstr_len = repstr.length();
if( repstr_len>=str_len )
result = repstr.substring(0, str_len);
else
{
total_len = pos + repstr_len;
if( total_len-1<=str_len )
result = str.substring(0,pos-1) + repstr + str.substring( pos-1 + repstr_len );
else
result = str.substring(0,pos-1) + repstr.substring(0,total_len-str_len-1 );
}
}
}
else
{
if( len<repstr_len )
{
repstr = repstr.substring(0, len);
repstr_len = repstr.length();
}
total_len = pos + repstr_len;
if( total_len-1<=str_len )
result = str.substring(0,pos-1) + repstr + str.substring( pos-1 + repstr_len );
else
result = str.substring(0,pos-1) + repstr.substring(0,total_len-str_len-1 );
}
//string.setVariantStr(result);
//string.setVariantType(Variant.V_STR );
}
/**
*LSet stringvar = string
*LSet varname1 = varname2
*Left aligns a string within a string variable, or copies a variable of one
*user-defined type to another variable of a different user-defined type.
*stringvar Name of string variable.
*string String expression to be left-aligned within stringvar.
*varname1 Variable name of the user-defined type being copied to.
*varname2 Variable name of the user-defined type being copied from.
*/
public static void LSET(Variant varstr1, Variant varstr2) throws HpException
{
String s="",str1 ,str2;
Variant Variant = new Variant();
str1 = get_str( varstr1);
str2 = get_str( varstr2);
if( str2.length() < str1.length() )
{
s = str2;
for( int i =str2.length(); i<str1.length(); i++ )
s = s+" ";// add space.
}
else
s = str2.substring(0,str1.length());
//varstr1.setVariantStr(s);
//varstr1.setVariantType(Variant.V_STR );
}
/*
*RSet stringvar = string
*Right aligns a string within a string variable.
*stringvar Name of string variable.
*string String expression to be right-aligned within stringvar.
*Remarks
RSet replaces any leftover characters in stringvar with spaces, back to its
beginning. RSet can't be used with user-defined types.
*/
public static void RSET(Variant varstr1, Variant varstr2) throws HpException
{
String str1,str2,s = "";
str1 = get_str( varstr1);
str2 = get_str( varstr2);
if( str2.length() < str1.length() )
{
for( int i=0; i<str1.length()-str2.length()-1; i++)
s = s + " ";
s = s + str2 ;
}
else
s = str2.substring(0,str1.length() );
//varstr1.setVariantStr(s);
//varstr1.setVariantType(Variant.V_STR );
}
/**
*InStr([start, ]string1, string2[, compare])
*return value
if string1 is zero-length return 0, if string1 is Null return Null,if string2
is zero-length return start,if string2 is Null return Null,if string2 is not
found return 0,if string2 is found within string1 return Position at which
match is found,if start > string2 return 0
*start Numeric expression that sets the starting position for each search. If
omitted,search begins at the first character position. If start contains
Null, an error occurs. The start argument is required if compare is
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?