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 + -
显示快捷键?