📄 hutil32.pas
字号:
if Count <= srclen then
begin
ch := str[Count];
for i := 0 to ArrCount - 1 do
if ch = Divider[i] then
goto CATCH_DIV;
end;
if (Count > srclen) then
begin
CATCH_DIV:
if (BufCount > 0) or (ch <> ' ') then
begin
if BufCount <= 0 then
begin
Buf[0] := ch;
Buf[1] := #0;
ch := ' ';
end
else
Buf[BufCount] := #0;
Dest := string(Buf);
if ch <> ' ' then
Result := Copy(str, Count, srclen - Count + 1)
//remain divider in rest-string,
else
Result := Copy(str, Count + 1, srclen - Count); //exclude whitespace
break;
end
else
begin
if (Count > srclen) then
begin
Dest := '';
Result := Copy(str, Count + 2, srclen - 1);
break;
end;
end;
end
else
begin
if BufCount < BUF_SIZE - 1 then
begin
Buf[BufCount] := ch;
Inc(BufCount);
end
else
ShowMessage('BUF_SIZE overflow !');
end;
Inc(Count);
end;
finally
//LeaveCriticalSection (CSUtilLock);
end;
end;
function GetValidStrVal(str: string; var Dest: string; const Divider: array of
Char): string;
//箭磊甫 盒府秦晨 ex) 12.30mV
const
BUF_SIZE = 15600;
var
Buf : array[0..BUF_SIZE] of Char;
BufCount, Count, srclen, i, ArrCount : Longint;
ch : Char;
currentNumeric : Boolean;
hexmode : Boolean;
label
CATCH_DIV;
begin
ch := #0; //Jacky
try
//EnterCriticalSection (CSUtilLock);
hexmode := False;
srclen := Length(str);
BufCount := 0;
Count := 1;
currentNumeric := False;
if str = '' then
begin
Dest := '';
Result := str;
exit;
end;
ArrCount := SizeOf(Divider) div SizeOf(Char);
while True do
begin
if Count <= srclen then
begin
ch := str[Count];
for i := 0 to ArrCount - 1 do
if ch = Divider[i] then
goto CATCH_DIV;
end;
if not currentNumeric then
begin
if (Count + 1) < srclen then
begin
if (str[Count] = '0') and (UpCase(str[Count + 1]) = 'X') then
begin
Buf[BufCount] := str[Count];
Buf[BufCount + 1] := str[Count + 1];
Inc(BufCount, 2);
Inc(Count, 2);
hexmode := True;
currentNumeric := True;
Continue;
end;
if (ch = '-') and (str[Count + 1] >= '0') and (str[Count + 1] <= '9')
then
begin
currentNumeric := True;
end;
end;
if (ch >= '0') and (ch <= '9') then
begin
currentNumeric := True;
end;
end
else
begin
if hexmode then
begin
if not (((ch >= '0') and (ch <= '9')) or
((ch >= 'A') and (ch <= 'F')) or
((ch >= 'a') and (ch <= 'f'))) then
begin
Dec(Count);
goto CATCH_DIV;
end;
end
else if ((ch < '0') or (ch > '9')) and (ch <> '.') then
begin
Dec(Count);
goto CATCH_DIV;
end;
end;
if (Count > srclen) then
begin
CATCH_DIV:
if (BufCount > 0) then
begin
Buf[BufCount] := #0;
Dest := string(Buf);
Result := Copy(str, Count + 1, srclen - Count);
break;
end
else
begin
if (Count > srclen) then
begin
Dest := '';
Result := Copy(str, Count + 2, srclen - 1);
break;
end;
end;
end
else
begin
if BufCount < BUF_SIZE - 1 then
begin
Buf[BufCount] := ch;
Inc(BufCount);
end
else
ShowMessage('BUF_SIZE overflow !');
end;
Inc(Count);
end;
finally
//LeaveCriticalSection (CSUtilLock);
end;
end;
{" " capture => CaptureString (source: string; var rdstr: string): string;
** 贸澜俊 " 绰 亲惑 盖 贸澜俊 乐促绊 啊沥
}
function GetValidStrCap(str: string; var Dest: string; const Divider: array of
Char): string;
begin
str := TrimLeft(str);
if str <> '' then
begin
if str[1] = '"' then
Result := CaptureString(str, Dest)
else
begin
Result := GetValidStr3(str, Dest, Divider);
end;
end
else
begin
Result := '';
Dest := '';
end;
end;
function IntToStrFill(num, len: Integer; fill: Char): string;
var
i : Integer;
str : string;
begin
Result := '';
str := IntToStr(num);
for i := 1 to len - Length(str) do
Result := Result + fill;
Result := Result + str;
end;
function IntToStr2(INT: Integer): string;
begin
if INT < 10 then
begin
Result := '0' + IntToStr(INT);
end
else
begin
Result := IntToStr(INT);
end;
end;
function IsInB(Src: string; Pos: Integer; targ: string): Boolean;
var
tLen, i : Integer;
begin
Result := False;
tLen := Length(targ);
if Length(Src) < Pos + tLen then
exit;
for i := 0 to tLen - 1 do
if UpCase(Src[Pos + i]) <> UpCase(targ[i + 1]) then
exit;
Result := True;
end;
function IsInRect(X, Y: Integer; Rect: TRect): Boolean;
begin
if (X >= Rect.Left) and (X <= Rect.Right) and (Y >= Rect.Top) and (Y <=
Rect.Bottom) then
Result := True
else
Result := False;
end;
function IsStringNumber(str: string): Boolean;
var
i : Integer;
begin
Result := True;
for i := 1 to Length(str) do
if (Byte(str[i]) < Byte('0')) or (Byte(str[i]) > Byte('9')) then
begin
Result := False;
break;
end;
end;
{Return : remain string}
function ArrestString(Source, SearchAfter, ArrestBefore: string;
const DropTags: array of string; var RsltStr: string): string;
const
BUF_SIZE = $7FFF;
var
Buf : array[0..BUF_SIZE] of Char;
BufCount, SrcCount, srclen, {AfterLen, BeforeLen,} DropCount, i: Integer;
ArrestNow : Boolean;
begin
try
//EnterCriticalSection (CSUtilLock);
RsltStr := ''; {result string}
srclen := Length(Source);
if srclen > BUF_SIZE then
begin
Result := '';
exit;
end;
BufCount := 0;
SrcCount := 1;
ArrestNow := False;
DropCount := SizeOf(DropTags) div SizeOf(string);
if (SearchAfter = '') then
ArrestNow := True;
//GetMem (Buf, BUF_SIZE);
while True do
begin
if SrcCount > srclen then
break;
if not ArrestNow then
begin
if IsInB(Source, SrcCount, SearchAfter) then
ArrestNow := True;
end
else
begin
Buf[BufCount] := Source[SrcCount];
if IsInB(Source, SrcCount, ArrestBefore) or (BufCount >= BUF_SIZE - 2)
then
begin
BufCount := BufCount - Length(ArrestBefore);
Buf[BufCount + 1] := #0;
RsltStr := string(Buf);
BufCount := 0;
break;
end;
for i := 0 to DropCount - 1 do
begin
if IsInB(Source, SrcCount, DropTags[i]) then
begin
BufCount := BufCount - Length(DropTags[i]);
break;
end;
end;
Inc(BufCount);
end;
Inc(SrcCount);
end;
if (ArrestNow) and (BufCount <> 0) then
begin
Buf[BufCount] := #0;
RsltStr := string(Buf);
end;
Result := Copy(Source, SrcCount + 1, srclen - SrcCount);
{result is remain string}
finally
//LeaveCriticalSection (CSUtilLock);
end;
end;
function ArrestStringEx(Source, SearchAfter, ArrestBefore: string; var
ArrestStr: string): string;
var
srclen : Integer;
GoodData, Fin : Boolean;
i, n : Integer;
begin
ArrestStr := ''; {result string}
if Source = '' then
begin
Result := '';
exit;
end;
try
srclen := Length(Source);
GoodData := False;
if srclen >= 2 then
if Source[1] = SearchAfter then
begin
//Source := Copy(Source, 2, srclen - 1);
Delete(source,1,1);
srclen := Length(Source);
GoodData := True;
end
else
begin
n := Pos(SearchAfter, Source);
if n > 0 then
begin
//Source := Copy(Source, n + 1, srclen - (n));
Delete(Source,1,n);
srclen := Length(Source);
GoodData := True;
end;
end;
Fin := False;
if GoodData then
begin
n := Pos(ArrestBefore, Source);
if n > 0 then
begin
ArrestStr := Copy(Source, 1, n - 1);
// Delete(Source,1,n);
// Result:=Source;
Result := Copy(Source, n + 1, srclen - n);
end
else
begin
Result := SearchAfter + Source;
end;
end
else
begin
for i := 1 to srclen do
begin
if Source[i] = SearchAfter then
begin
Result := Copy(Source, i, srclen - i + 1);
break;
end;
end;
end;
except
ArrestStr := '';
Result := '';
end;
end;
function SkipStr(Src: string; const Skips: array of Char): string;
var
i, len, C : Integer;
NowSkip : Boolean;
begin
len := Length(Src);
// Count := sizeof(Skips) div sizeof (Char);
for i := 1 to len do
begin
NowSkip := False;
for C := Low(Skips) to High(Skips) do
if Src[i] = Skips[C] then
begin
NowSkip := True;
break;
end;
if not NowSkip then
break;
end;
Result := Copy(Src, i, len - i + 1);
end;
function GetStrToCoords(str: string): TRect;
var
Temp : string;
begin
str := GetValidStr3(str, Temp, [',', ' ']);
Result.Left := Str_ToInt(Temp, 0);
str := GetValidStr3(str, Temp, [',', ' ']);
Result.Top := Str_ToInt(Temp, 0);
str := GetValidStr3(str, Temp, [',', ' ']);
Result.Right := Str_ToInt(Temp, 0);
GetValidStr3(str, Temp, [',', ' ']);
Result.Bottom := Str_ToInt(Temp, 0);
end;
function CombineDirFile(SrcDir, TargName: string): string;
begin
if (SrcDir = '') or (TargName = '') then
begin
Result := SrcDir + TargName;
exit;
end;
if SrcDir[Length(SrcDir)] = '\' then
Result := SrcDir + TargName
else
Result := SrcDir + '\' + TargName;
end;
function CompareLStr(Src, targ: string; compn: Integer): Boolean;
var
i : Integer;
begin
Result := False;
if compn <= 0 then
exit;
if Length(Src) < compn then
exit;
if Length(targ) < compn then
exit;
Result := True;
for i := 1 to compn do
if UpCase(Src[i]) <> UpCase(targ[i]) then
begin
Result := False;
break;
end;
end;
function CompareBuffer(p1, p2: Pbyte; len: Integer): Boolean;
var
i : Integer;
begin
Result := True;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -