📄 xymath.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 + -