hpfileio.java

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

JAVA
2,123
字号
      int  by;
      int  i =0,k=0;
      int  flag = 0, stringflag = 0,timeflag = 0;
      char ch;
      int[]  data_type;
      double[] numberic;
      short type = vr.HcDataType();
      String s;
      long pf = 0 , spacepf = 0;
      long curpos = 0;
      char[] cc = null;
      long filelength = finfo.Length();

  	   curpos = finfo.GetFilePointer();
    	if ( curpos > filelength && filelength != 0  )
         throw new HpException(62,"Input past end of file.");

      if (finfo.ishttp)
      {
         Vector vch = new Vector();
         do{
            by = finfo.Read();
            ch = (char)by;
            pf++;
         }while (ch == ' ');

         if (ch != '\r' && ch != '\n')
         {
            --pf;
            vch.addElement(new Character(ch));
         }

         curpos = curpos + pf;
         finfo.vbSeek(curpos);

         by = finfo.Read();
         ch = (char)by;

         if (ch == '\"')
         {
            pf = 0;
            flag = 1;
            by = finfo.Read();
            ch = (char)by;

            while ( ch != '\"' && ch != '\r' && filelength > curpos + pf)
            {
               vch.addElement(new Character(ch));
               by = finfo.Read();
               ch = (char)by;
               ++pf;
            }

            if ( ch == '\"' )
			   {
               stringflag = 1;
            }
         }
         else
         {
            if ( ch == '\'' )
            {
               pf = 0;
               flag = 1;
               by = finfo.Read();
               ch = (char)by;

               while ( ch != '\"' && ch != '\r' && filelength > curpos + pf)
               {
                  vch.addElement(new Character(ch));
                  by = finfo.Read();
                  ch = (char)by;
                  ++pf;
               }

               if ( ch == '\'' )
                  stringflag = 1;
	         }
            else if ( ch == '#' )
            {
               pf = 0;
               flag = 1;
               by = finfo.Read();
               ch = (char)by;

               while ( ch != '\"' && ch != '\r' && filelength > curpos + pf)
               {
                  vch.addElement(new Character(ch));
                  by = finfo.Read();
                  ch = (char)by;
                  ++pf;
               }

               if ( ch == '#' )
			      {
                  timeflag = 1;
               }
            }
            else
            {
               vch.addElement(new Character(ch));
               pf = 0;
               by = finfo.Read();
               ch = (char)by;
               while(ch != ','  && ch != '\r' && ch != '\n' && filelength > pf)
               {
                  vch.addElement(new Character(ch));
                  by = finfo.Read();
                  ch = (char)by;
                  ++pf;
               }
   	      }
         }
         cc = new char[vch.size()];
         for (int j=0;j<vch.size();j++)
            cc[j] = ((Character)(vch.elementAt(j))).charValue();

      }
      else
      {
         do{
            by = finfo.ReadUnsignedByte();
            ch = (char)by;
            pf++;
         }while (ch == ' ');

         if (ch != '\r' && ch != '\n')
            --pf;

         curpos = curpos + pf;
         finfo.vbSeek(curpos);

         by = finfo.ReadUnsignedByte();
         ch = (char)by;

         if (ch == '\"')
         {
            pf = 0;
            flag = 1;
            do{
               by = finfo.ReadUnsignedByte();
               ch = (char)by;
               ++pf;
            }while ( ch != '\"' && ch != '\r' && filelength > curpos + pf);

            if ( ch == '\"' )
			   {
               stringflag = 1;
               finfo.vbSeek(curpos);
               spacepf = 0;
               do{
                  by = finfo.ReadUnsignedByte();
                  ch = (char)by;
                  ++spacepf;
               }while( ch != ',' && ch != '\r' && filelength > curpos + spacepf);
            }else
            {
               finfo.vbSeek(curpos);
               pf = 0;
               do{
                  by = finfo.ReadUnsignedByte();
                  ch = (char)by;
                  ++pf;
               }while( ch != ',' && ch != '\r' && filelength > curpos + pf );
               if (ch != ','  && ch != '\r' && ch != '\n' && filelength >= curpos + pf)
                  pf++;
               spacepf = pf;
      	   }
         }
         else
         {
            if ( ch == '\'' )
            {
               pf = 0;
               do{
                  by = finfo.ReadUnsignedByte();
                  ch = (char)by;
                  ++pf;
               }while( ch != '\r' && ch != '\'' && filelength > curpos + pf);

               if ( ch == '\'' )
				   {
                  finfo.vbSeek(curpos);
				      pf = pf + 2;
					   stringflag = 1;
                  spacepf = 0;
                  do{
                     by = finfo.ReadUnsignedByte();
                     ch = (char)by;
                     ++spacepf;
                  }while( ch != ',' && ch != '\r' && filelength > curpos + spacepf);
	            }else
	            {
                  finfo.vbSeek(curpos);
                  pf = 0;
                  do{
                     by = finfo.ReadUnsignedByte();
                     ch = (char)by;
                     ++pf;
                  }while( ch != ',' && ch != '\r' && filelength > curpos + pf);
                  if (ch != ','  && ch != '\r' && ch != '\n' && filelength >= curpos + pf)
                     pf++;
                  spacepf = pf;
	            }
	         }
            else if ( ch == '#' )
            {
               pf = 0;
               do{
                  by = finfo.ReadUnsignedByte();
                  ch = (char)by;
                  ++pf;
               }while( ch != '\r' && ch != ',' && ch != '#' && filelength > curpos + pf);

				   if ( ch == '#' )
				   {
                  timeflag = 1;
                  pf = pf + 2;
                  finfo.vbSeek(curpos);
                  spacepf = 0;
                  do{
                     by = finfo.ReadUnsignedByte();
                     ch = (char)by;
                     ++spacepf;
                  }while( ch != ',' && ch != '\r' && filelength > curpos + spacepf);
   	         }else
               {
                  finfo.vbSeek(curpos);
                  pf = 0;
                  do{
                     by = finfo.ReadUnsignedByte();
                     ch = (char)by;
                     ++pf;
                  }while( ch != ',' && ch != '\r' && filelength > curpos + pf);
                  if (ch != ','  && ch != '\r' && ch != '\n' && filelength >= curpos + pf)
                     pf++;
                  spacepf = pf;
   	         }
            }
            else
            {
               finfo.vbSeek(curpos);
               pf = 0;
               do{
                  ++pf;
                  by = finfo.ReadUnsignedByte();
                  ch = (char)by;
               }while(ch != ','  && ch != '\r' && ch != '\n' && filelength > curpos + pf);
               if (ch != ','  && ch != '\r' && ch != '\n' && filelength >= curpos + pf)
                  pf++;
   	      }
         }
         pf--;
         spacepf--;

         if ( pf < 1 )
         {
            switch(type)
		      {
               case Variant.V_BOL:
                  vr.HcAssign(new HcData(false));
                  break;
			      case Variant.V_BYT:
               case Variant.V_INT:
               case Variant.V_LNG:
               case Variant.V_SGL:
               case Variant.V_DBL:
               case Variant.V_CUR:
                  vr.HcAssign(new HcData(0));
                  break;
               case Variant.V_VAR:
               case Variant.V_EPT:
               case Variant.V_NULL:
               case Variant.V_STR:
               case Variant.V_FIX_STR:
                  vr.HcAssign("");
                  break;
			      default:
                  throw new HpException(13,"Type Mismatch.");
		      }
		      if (ch == ',')
			      curpos++;
		      else if (ch == '\r')
			      curpos = curpos+2;
		      else if (ch == '\n')
			      curpos++;
		      finfo.vbSeek(curpos);
              return;
         }

         finfo.vbSeek(curpos);

         if (flag == 1)
            finfo.vbSeek(curpos + 1);

         char[] c = new char[(int)pf];

         for ( i=0;i<(int)pf;i++)
         {
            by = finfo.ReadUnsignedByte();
            c[i] = (char)by;
         }

		   i = (int)pf;

         if ( (c[0] == '&' || c[0] == '+' || c[0] == '-' || c[0] == '.' ||
             Character.isDigit(c[0])) && (timeflag != 1 && stringflag != 1))
		   {
               for( i=1; i < (int)pf; i++ )
			      if ( Character.isSpaceChar(c[i]))
    	             break;
			   if (pf != i)
				   curpos = curpos + pf - i + 1;
			   else
				   curpos = curpos + pf;
		   }
         cc = new char[i];

         for(int j=0; j < i; j++ )
           cc[j] = c[j];

		   if ( flag == 1 || stringflag == 1 || timeflag == 1 )
			   curpos = curpos + spacepf ;//- pf - 1;
		   else
			   curpos = finfo.GetFilePointer();

		   if (ch == ',')
		       curpos++;
		   else if (ch == '\r')
			   curpos = curpos+2;
		   else if (ch == '\n')
			   curpos++;

		   finfo.vbSeek(curpos);
      }

		if ( stringflag == 1 || timeflag == 1 && cc != null)
      {
         s = new String(cc);
         if(s.equals("#NULL#"))
         {
			   switch(type)
			   {
				   case Variant.V_VAR:
				   case Variant.V_EPT:
				   case Variant.V_NULL:
						vr.HcAssignNull();
						break;
				   case Variant.V_BYT:
				   case Variant.V_INT:
				   case Variant.V_LNG:
				   case Variant.V_SGL:
				   case Variant.V_DBL:
				   case Variant.V_CUR:
						vr.HcAssign(new HcData(0));
                   		break;
				   case Variant.V_STR:
                   case Variant.V_FIX_STR:
						vr.HcAssign("#NULL#");
						break;
				   default:
						throw new HpException(13,"Type mismatch");
			   }
			return;
         }
			else if (s.equals("#TRUE#"))
			{
			   switch(type)
			   {
				   case Variant.V_EPT:
				   case Variant.V_NULL:
				   case Variant.V_BOL:
				   case Variant.V_VAR:
						vr.HcAssign(new HcData(true));
						break;
				   case Variant.V_BYT:
				   case Variant.V_INT:
				   case Variant.V_LNG:
				   case Variant.V_SGL:
				   case Variant.V_DBL:
				   case Variant.V_CUR:
						vr.HcAssign(new HcData(0));
                   		break;
				   case Variant.V_STR:
                   case Variant.V_FIX_STR:
						vr.HcAssign("#TRUE#");
						break;
				   default:
						throw new HpException(13,"Type mismatch");
			   }
			   return;
			}
			else if (s.equals("#FALSE#"))
			{
			   switch(type)
			   {
				   case Variant.V_EPT:
				   case Variant.V_NULL:
				   case Variant.V_BOL:
				   case Variant.V_VAR:
						vr.HcAssign(new HcData(false));
						break;
				   case Variant.V_BYT:
				   case Variant.V_INT:
				   case Variant.V_LNG:
				   case Variant.V_SGL:
				   case Variant.V_DBL:
				   case Variant.V_CUR:
                  vr.HcAssign(new HcData(0));
                  break;
				   case Variant.V_STR:
                   case Variant.V_FIX_STR:
						vr.HcAssign("#FALSE#");
						break;
				   default:
						throw new HpException(13,"Type mismatch");
			   }
			   return;
			}
         else
         {
            vr.HcAssign(isDateTime(s));
            return;
         }
      }

⌨️ 快捷键说明

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