⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xymath.pas

📁 设备巡检操作系统 本程序是专门为某电厂开发的设备巡检系统
💻 PAS
字号:
unit XYMath;

interface

uses SysUtils,Variants;

Type
  TStrArray = array of string;
  T1DArray_Var = array of variant;

  TDataType=(_str,_int,_single,_variant);

  // 从字符串中读取数据,以空格分割. 返回字符串数组.
  function  ReadFromStr(sx: string; Delimiter: char=' '): TStrArray; overload;
  function  ReadFromStr(sx: string; Flag: TDataType): T1DArray_var; overload;

  //向量=>字符串, 参数 c 为分割字符,缺省为空格符' '
  // Example: sx:=MakeStr(['test', 100, ' ', True, 3.14159, TForm],'%');
  function MakeStr(const Args: array of const; c: string=' '): string;


implementation

function ReadFromStr(sx: string; Delimiter: char=' '): TStrArray;
var
  StrSt,StrEnd: Word;
  i,sl,ix: Word;
begin
  sx:= Trim(sx);
  if sx='' then exit;
  sx:= ConCat(sx+delimiter);
  sl:= StrLen(PChar(sx));
  result:= VarArrayCreate([0,0], varOleStr);
  for i:=0 to sl do
  begin
    result[i]:= Copy(sx,1,Pos(Delimiter,sx)-1);
    Delete(sx, 1, Pos(Delimiter,sx));
    sx:= TrimLeft(sx);
    if sx='' then exit else
      SetLength(result, i+2);
  end;
end;

  // 返回的是 variant 类型
function ReadFromStr(sx:String;Flag:TDataType):T1DArray_var;overload;
var
  sxP: Pchar;
  StrSt,StrEnd: Pchar;
  i,k: integer;
  s: array[0..20] of Char;
  sxx: string;
begin
 case Flag of
  _str    : result:=VarArrayCreate([0, 0], varOleStr);
  _int    : result:=VarArrayCreate([0, 0], varInteger);
  _Single : result:=VarArrayCreate([0, 0], varSingle);
  else
   raise EMathError.Create('无此数据类型,此函数只支持_str,_int,_Single的可变类型');
  end;  //end of case

 sxP:= Pchar(sx);
 while sxP[0]=' ' do sxP:=sxP+1;
 StrEnd:= sxP;
 k := strLen(sxP);
 for i:=0 to k do
  begin
   StrSt:= StrEnd;
   if StrSt=nil then exit;
    while StrSt[0]=' ' do
      StrSt:= StrSt+1;
    StrEnd:= StrScan(Strst+1,' ');
    StrLCopy(s, strSt, StrEnd-Strst);
    sxx:= string(s);
    setLength(result, i+1);
    case Flag of
     _str :  result[i]:=sxx;
     _int :  result[i]:=StrToInt(sxx);
     _Single:result[i]:=StrToFloat(sxx);
     else
     result[i]:=sxx;
    end;//end of case
  end;
end;

   //向量=>字符串 ,参数 c 为分割字符
function MakeStr(const Args: array of const; c:string = ' '): string;
const
  BoolChars: array[Boolean] of Char = ('F', 'T');
var
  I: Integer;
begin
  Result := '';
  for I := 0 to High(Args) do
    with Args[I] do
      case VType of
        vtInteger:    Result := Result + c + IntToStr(VInteger);
        vtBoolean:    Result := Result + c + BoolChars[VBoolean];
        vtChar:       Result := Result + c + VChar;
        vtExtended:   Result := Result + c + FloatToStr(VExtended^);

        vtString:     Result := Result + c + VString^;
        vtPChar:      Result := Result + c + VPChar;
        vtObject:     Result := Result + c + VObject.ClassName;
        vtClass:      Result := Result + c + VClass.ClassName;
        vtAnsiString: Result := Result + c + string(VAnsiString);
        vtCurrency:   Result := Result + c + CurrToStr(VCurrency^);
        vtVariant:    Result := Result + c + string(VVariant^);
        vtInt64:      Result := Result + c + IntToStr(VInt64^);
    end;
end;

end.

⌨️ 快捷键说明

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