📄 ufunctions.pas
字号:
unit UFunctions;
interface
uses
Windows, Forms,Messages, SysUtils, Classes, Controls;
function GetAppPath:String;
Function showstr(str:string;F:boolean=False;Titlestr:string='注意'):boolean;
Function BoolToString(b:boolean):string;
Function StringToBool(s:string):Boolean;
Function StringToint(s:string):integer;
Function HexStringToint(s:string):integer;
Function MinValue(a,b:integer):integer;
Function SeperaStr(S:string;Var arrString:array of string;Sp:char=';';ConSp:char='\'):integer;
//字符串里面有许多子串,其中以Splitter分隔,该函数作用就是将这些子串分离到DestTStr中
function StrToTstr(OriginStr:String;DestTstr:TStringList;MaxProcessCount:integer=6;Splitter:String ='/'):Integer;
Function NextSplitField(var S1 : string;StartChar:String='[';EndChar:String=']') : string;
//当src为 [1],[2],[3]时 调用:StringSplit(src,dest,'[',']'),把1,2,3返回至dest中
Function StringSplit(src:String;dest:TStrings;StartChar:String='[';EndChar:String=']'):integer;
//pos函数的改进版,多了一个StartPos的参数,是从第几个字符开始找起
function Pos_(Substr: string; S: string;StartPos:integer): Integer;
Function AllIsDigit(s:string):boolean;
Function AllIsNumber(s:string):boolean;
implementation
function GetAppPath:String;
begin
GetAppPath:=ExtractFilePath(Application.ExeName);
end;
Function showstr(str:string;F:boolean=False;Titlestr:string='注意'):boolean;
begin
result:=False;
if not F then
begin
application.MessageBox(pchar(str),pchar(titlestr),MB_OK);
exit;
end;
result:=application.MessageBox(pchar(str),pchar(titlestr),MB_OKCancel)=IDOK;
end;
Function BoolToString(b:boolean):string;
begin
if b
then result:='True'
else result:='False';
end;
Function StringToBool(s:string):Boolean;
begin
if stricomp(pchar(s),'true')=0
then result:=True
else result:=False;
end;
Function StringToint(s:string):integer;
begin
result:=0;
s:=trim(s);
if s='' then exit;
try
result:=strtoint(s);
Except
result:=0;
end;
end;
Function HexStringToint(s:string):integer;
begin
if (pos('$',Uppercase(s))=0) then s:='$'+s;
result:=StringToint(s);
end;
Function MinValue(a,b:integer):integer;
begin
if a>b then
result:=b
else
result:=a;
end;
Function SeperaStr(S:string;Var arrString:array of string;Sp:char=';';ConSp:char='\'):integer;
var i,DivideStart,iLen:integer;
s1,s2:string;
IsESC:boolean;//表明当前字符是否转义符 "\\" 中第一个\true,第二个就False了
begin
result:=0;
DivideStart:=1; //分割串的首字符位置
IsESC:=False;
i:=1;
iLen:=Length(s);
while i<=iLen do
begin
if s[i]=ConSp then
IsESC:=not IsESC
else
begin //sp为 分隔符 ,如果当前是转义符号,那么当前位置为普通符号 'xxx\|xxx' 不需要分割
if (s[i]=sp) and (not IsESC) then //如果当前不是转义符,那么就要分割 'xxx|xxx' 'xxx\\|xxx'
begin
if result<=high(arrString) then
begin
arrString[result]:=copy(s,DivideStart,i-1);
inc(result);
end;
DivideStart:=i+1;
end;
IsESC:=false;
end;
inc(i);
end;
if (DivideStart<=iLen) and (result<=high(arrString)) then
begin
arrString[result]:=copy(s,DivideStart,i-1);
inc(result);
end;
end;
function StrToTstr(OriginStr:String;DestTstr:TStringList;MaxProcessCount:integer=6;Splitter:String ='/'):Integer;
var
i,iRet,icount:integer;
tmpStr:String;
begin
tmpStr:='';
iRet:=0;
icount:=0;
DestTStr.Clear;
for i:=1 to length(OriginStr) do
begin
if (OriginStr[i]<>Splitter)or (iCount>=MaxProcessCount) then
tmpStr:=tmpStr+OriginStr[i];
if OriginStr[i]=Splitter then
//if tmpStr<>'' then
begin
DestTStr.Add(tmpStr);
iRet:=iRet+1;
tmpStr:='';
inc(iCount);
end;
end;
//if tmpStr<>'' then
begin
DestTStr.Add(tmpStr);
iRet:=iRet+1;
tmpStr:='';
end;
Result:=iRet;
end;
Function NextSplitField(var S1 : string;StartChar:String='[';EndChar:String=']') : string;
var
p1,p2: integer;
begin
p1 := Pos(StartChar, S1);
p2 := Pos(EndChar, S1);
if p2<p1 then p2:=p1;
if (P1>0) and (P2>p1 ) then
begin
Result := Copy(S1,p1+1,p2-p1-1);
Delete(S1,1, p2);
end
else
begin Result := '';S1 := ''; end
end;
Function StringSplit(src:String;dest:TStrings;StartChar:String;EndChar:String):integer;
var
iPos1,iPos2,iRet:integer;
tmpStr:String;
begin
iPos1:=0;
iPos2:=1;
iRet:=0;
dest.Clear;
while iPos2>0 do
begin
iPos1:=Pos_(StartChar,src,iPos1+1);
if iPos1>0 then
begin
iPos2:=Pos_(EndChar,src,iPos1+1);
if iPos2>0 then
begin
tmpStr:=Copy(src,iPos1+1,iPos2-iPos1-1);
dest.Add( tmpStr);
INC(iRet);
end;
end
else
iPos2:=0;
end;
Result:=iRet;
end;
function Pos_(Substr: string; S: string;StartPos:integer): Integer;
var
iRet:integer;
tmpStr:String;
begin
iRet:=0;
if length(S)>=(StartPos+Length(substr)-1) then
begin
tmpStr:=Copy(s,StartPos,Length(s)-StartPos+1);
iRet:=Pos(substr,tmpStr);
if iRet>0 then iRet:=iRet+StartPos-1;
end;
Result:=iRet;
end;
Function AllIsDigit(s:string):boolean;
var pStr:pchar;
begin
result:=False;
pStr:=pchar(s);
while pStr^<>#0 do
begin
if (pStr^<'0') or (pStr^>'9') then Exit;
inc(pStr);
end;
result:=True;
end;
Function AllIsNumber(s:string):boolean;
var pStr:pchar;
begin
pStr:=pchar(s);
while pStr^<>#0 do
begin
if not (pStr^ in ['0'..'9','A'..'F','a'..'e']) then exit;
inc(pStr);
end;
result:=True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -