hpfileio.java

来自「一个简单的visio程序。」· Java 代码 · 共 2,123 行 · 第 1/5 页

JAVA
2,123
字号

      numberic = new double[1];
      data_type = new int[1];
      if (cc != null)
		   scanstr(cc, numberic, data_type);

		type = vr.HcDataType();

      if (type == Variant.V_VAR || type == Variant.V_EPT || type == Variant.V_NULL)
      {

         switch ( data_type[0] )
         {
            case Variant.V_EPT:
                  HcData emp = HcData.newEmpty();
                  vr.HcAssign(emp);
                  break;
     	      case Variant.V_NULL:
                  HcData nl = HcData.newNull();
                  vr.HcAssign(nl);
                  break;
				case Variant.V_BYT:
                  vr.HcAssign((byte)numberic[0]);
                  break;
      	   case Variant.V_INT:
                  vr.HcAssign((short)numberic[0]);
                  break;
        	   case Variant.V_LNG:
                  vr.HcAssign((int)numberic[0]);
                  break;
        	   case Variant.V_SGL:
                  vr.HcAssign((float)numberic[0]);
                  break;
        	   case Variant.V_DBL:
                  vr.HcAssign((double)numberic[0]);
                  break;
            case Variant.V_CUR:
					   vr.HcAssign(new HcData((double)numberic[0],true));
					   break;
            case Variant.V_STR:
                  s = new String(cc);
                  vr.HcAssign(s.trim());
                  return;
         }
      }
      else
		{
         switch(type)
         {
             case Variant.V_STR:
	          case Variant.V_FIX_STR:
                  switch(data_type[0])
                  {
                     case Variant.V_EPT:
                          HcData emp = HcData.newEmpty();
                          vr.HcAssign(emp);
                          break;
                     case Variant.V_NULL:
                          vr.HcAssign("#NULL#");
                          break;
                     case Variant.V_STR:
                          s = new String(cc);
                          vr.HcAssign(s);
                          break;
					      case Variant.V_BYT:
					           vr.HcAssign(String.valueOf((byte)numberic[0]));
      						  break;
                     case Variant.V_INT:
                          vr.HcAssign(String.valueOf((short)numberic[0]));
                          break;
                	   case Variant.V_LNG:
                          vr.HcAssign(String.valueOf((int)numberic[0]));
                   	     break;
                	   case Variant.V_SGL:
                          vr.HcAssign(String.valueOf((float)numberic[0]));
                          break;
                	   case Variant.V_DBL:
                     case Variant.V_CUR:
                          vr.HcAssign(String.valueOf((double)numberic[0]));
                   	     break;
                  }
                  break;
			    case Variant.V_BOL:
                  switch(data_type[0])
                  {
                     case Variant.V_EPT:
                     case Variant.V_NULL:
                     case Variant.V_STR:
                         vr.HcAssign(new HcData(false));
                         break;
                     case Variant.V_INT:
                     case Variant.V_LNG:
                     case Variant.V_SGL:
                     case Variant.V_DBL:
                     case Variant.V_CUR:
                         vr.HcAssign(new HcData(true));
                         break;
                  }
                  break;
              case Variant.V_BYT:
                  switch(data_type[0])
                  {
                     case Variant.V_EPT:
                     case Variant.V_NULL:
                     case Variant.V_STR:
                          vr.HcAssign((byte)0);
                          break;
                     case Variant.V_INT:
                     case Variant.V_LNG:
                     case Variant.V_SGL:
                     case Variant.V_DBL:
                     case Variant.V_CUR:
                          vr.HcAssign((byte)numberic[0]);
                          break;
                  }
                  break;
              case Variant.V_INT:
                  switch(data_type[0])
                  {
                     case Variant.V_EPT:
                     case Variant.V_NULL:
                     case Variant.V_STR:
                        vr.HcAssign((int)0);
                        break;
                     case Variant.V_INT:
                     case Variant.V_LNG:
                     case Variant.V_SGL:
                     case Variant.V_DBL:
                     case Variant.V_CUR:
                        vr.HcAssign((int)numberic[0]);
                        break;
                  }
                  break;
              case Variant.V_LNG:
                  switch(data_type[0])
                  {
                     case Variant.V_EPT:
                     case Variant.V_NULL:
                     case Variant.V_STR:
                         vr.HcAssign((long)0);
                         break;
                     case Variant.V_INT:
                     case Variant.V_LNG:
                     case Variant.V_SGL:
                     case Variant.V_DBL:
                     case Variant.V_CUR:
                         vr.HcAssign((long)numberic[0]);
                   		 break;
                  }
                  break;
              case Variant.V_SGL:
                  switch(data_type[0])
                  {
                     case Variant.V_EPT:
                     case Variant.V_NULL:
                     case Variant.V_STR:
                         vr.HcAssign((float)0);
                         break;
                     case Variant.V_INT:
                     case Variant.V_LNG:
                     case Variant.V_SGL:
                     case Variant.V_DBL:
                     case Variant.V_CUR:
                         vr.HcAssign((float)numberic[0]);
                   		 break;
                  }
                  break;

              case Variant.V_DBL:
              case Variant.V_CUR:
                  switch(data_type[0])
                  {
                     case Variant.V_EPT:
                     case Variant.V_NULL:
                     case Variant.V_STR:
                         vr.HcAssign((double)0);
                         break;
                     case Variant.V_INT:
                     case Variant.V_LNG:
                     case Variant.V_SGL:
                     case Variant.V_DBL:
                     case Variant.V_CUR:
                         vr.HcAssign((double)numberic[0]);
                   		 return;
                  }
                  break;
			  default:
				   throw new HpException(13,"Type mismatch");
         }
		}

   }

	static HcData isDateTime(String s)throws HpException
	{
		if (s.charAt(0) == '#' && s.charAt(s.length()-1) == '#')
		{
			String ss = s.substring(1,s.length()-1);
			String sy,sm,date=null,time=null;
			int in1,year,month,day,hour,min,sec;
			in1 = s.indexOf(" ");
			if (in1 != -1)
			{
				date = ss.substring(0,in1-1);
				time = ss.substring(in1,ss.length());
			}
			else
			{
				if (s.indexOf("-") != -1)
					date = ss;
				else if(s.indexOf(":") != -1)
					time = ss;
				else
					return new HcData(s);
			}

			if (date != null && (in1 = date.indexOf("-")) != -1)
			{
				sy = date.substring(0,in1);
				year = Integer.parseInt(sy);
				if (in1+1 >= date.length())
					return new HcData(s);
				else
					date = date.substring(in1+1,date.length());
				if ((in1 = date.indexOf("-")) != -1)
				{
					sm = date.substring(0,in1);
					ss = date.substring(in1+1,date.length());
					month = Integer.parseInt(sm);
					day = Integer.parseInt(ss);
					if (time != null && (in1 = time.indexOf(":")) != -1)
					{
						sy = time.substring(0,in1);
						hour = Integer.parseInt(sy);
						if(in1 + 1 >= time.length())
							return new HcData(s);
						else
							time = time.substring(in1+1,time.length());
						if ((in1 = time.indexOf(":")) != -1)
						{
							sm = time.substring(0,in1);
							ss = time.substring(in1+1,time.length());
							min = Integer.parseInt(sm);
							sec = Integer.parseInt(ss);
							return new HcData(year,month,day,hour,min,sec);
						}else
						{
							sm = time;
							min = Integer.parseInt(sm);
							return new HcData(year,month,day,hour,min,0);
						}
					}else
						return new HcData(year,month,day);
				}else
				{
					sm = date;
					month = Integer.parseInt(sm);
					if (year <= 31)
					{
						if (year > 12 && month <= 12)
							day = year;
						else
						{
							day = month;
							month = year;
						}
						Calendar  calendar = Calendar.getInstance();
						calendar.setTime(new Date());
						year = calendar.get(Calendar.YEAR);
					}else
						day = 1;

					if (time != null && (in1 = time.indexOf(":")) != -1)
					{
						sy = time.substring(0,in1);
						hour = Integer.parseInt(sy);
						time = time.substring(in1+1,time.length());
						if ((in1 = time.indexOf(":")) != -1)
						{
							sm = time.substring(0,in1);
							ss = time.substring(in1+1,time.length());
							min = Integer.parseInt(sm);
							sec = Integer.parseInt(ss);
							return new HcData(year,month,day,hour,min,sec);
						}else
						{
							sm = time;
							min = Integer.parseInt(sm);
							return new HcData(year,month,day,hour,min,0);
						}
					}else
						return new HcData(year,month,day);
				}
			}else if (time != null && (in1 = time.indexOf(":")) != -1)
			{
				sy = time.substring(0,in1);
				hour = Integer.parseInt(sy);
				if(in1 + 1 >= time.length())
					return new HcData(s);
				else
					time = time.substring(in1+1,time.length());
				if ((in1 = time.indexOf(":")) != -1)
				{
					sm = time.substring(0,in1);
					ss = time.substring(in1+1,time.length());
					min = Integer.parseInt(sm);
					sec = Integer.parseInt(ss);
					return new HcData(0,0,0,hour,min,sec);
				}else
				{
					sm = time;
					min = Integer.parseInt(sm);
					return new HcData(0,0,0,hour,min,0);
				}
			}else
				return new HcData(s);
		}
		else
			return new HcData(s);

	}

    static void numtype(char[] buf,double[] numberic,int[] data_type)
    {
        //int err = 0;
        double numdbl=0.0;

        String s = new String(buf);
        if(Double.valueOf(s).doubleValue() == Double.POSITIVE_INFINITY ||
           Double.valueOf(s).doubleValue() == Double.NEGATIVE_INFINITY)
        {
           data_type[0] = Variant.V_STR;
           return;
        }
        else //if ( Double.valueOf(s).doubleValue() != 34.0 )	 //34 -- '\"'
        {
	       numdbl = Double.valueOf(s).doubleValue();
	       if ( ( numdbl - Math.floor(numdbl) ) > 0 )	// numdbl is float
		   {
		      if ((numdbl <= 3.40282346638528860e+38 && numdbl >= 1.40129846432481707e-45)||
		          (numdbl >= -3.40282346638528860e+38 && numdbl <= -1.40129846432481707e-45))
		        {
		          data_type[0] = Variant.V_SGL;
	              numberic[0] = numdbl;
			      return ;
		        }
		     data_type[0] = Variant.V_DBL;
		     numberic[0] = numdbl;
		     return ;
		   }
	       else	    //numdbl is int or long
	       {
	         if ( numdbl >= -32768.000 && numdbl <= 32767.000 )
	    	 {
		          data_type[0] = Variant.V_INT;
		          numberic[0] = numdbl;
		          return ;
		     }
		     else if ( numdbl >= -2147483648.00 && numdbl <= 2147483647.00 )
             {
 		         data_type[0] = Variant.V_LNG;
		         numberic[0] = numdbl;
		         return ;
		     }
	         else if ((numdbl <= 3.40282346638528860e+38 && numdbl >= 1.40129846432481707e-45)||
		         (numdbl >= -3.40282346638528860e+38 && numdbl <= -1.40129846432481707e-45))
		     {
		         data_type[0] = Variant.V_SGL;
			     numberic[0] = numdbl;
			     return ;
		     }
		     data_type[0] = Variant.V_DBL;
		     numberic[0] = numdbl;
		     return ;
	       }
        }

    }

    static void scanstr(char[] buf,double[] numberic,int[] data_type)
    {
        int err = 0,i =0,j=0;
        int k = 0;
        char[] inch;

        String s = new String(buf);

        k = s.length();
        char[] ch = new char[k];

        if ( buf[0] == ',' || buf[0] == '\r' || buf[0] == '\n' )
        {
	       data_type[0] = Variant.V_EMPTY;
	       return ;
        }

        if ( k >= 3 )
        {
           if ( buf[0] == '+' || buf[0] == '-' )
           {
              ch[0] = buf[0];
              if ( Character.isDigit(buf[1]) )
              {
                 for (i=1;i<k;i++)
                 {
                    if(Character.isDigit(buf[i]))
                       ch[i] = buf[i];
                    else
                       break;
                 }
                 if (i<k-1 && (buf[i] == 'e' || buf[i] == 'E'))
                 {
                    ch[i] = buf[i];
                    i++;
                    if (buf[i] == '+' || buf[i] == '-')
                    {
                        ch[i] = buf[i];
                        for (j=i+1;j<k;j++)
                        {
                           if (Character.isDigit(buf[j]))
                               ch[j] = buf[j];
                           else
                              break;
                        }
                        i = j;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?