|
@@ -4,6 +4,10 @@
|
|
{ }
|
|
{ }
|
|
{ CopyRight (C) 2018-2020 KngStr }
|
|
{ CopyRight (C) 2018-2020 KngStr }
|
|
{ }
|
|
{ }
|
|
|
|
+{ Some Code from }
|
|
|
|
+{ QDAC of swish }
|
|
|
|
+{ Thanks }
|
|
|
|
+{ }
|
|
{*******************************************************}
|
|
{*******************************************************}
|
|
|
|
|
|
unit ksString;
|
|
unit ksString;
|
|
@@ -37,6 +41,26 @@ function FormatSeconds(const AValue: Integer): string; overload;
|
|
function FormatSeconds(const AValue: Double): string; overload;
|
|
function FormatSeconds(const AValue: Double): string; overload;
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
|
|
+/// 格式化文件大小,拷贝自qdac,增加更多单位
|
|
|
|
+/// </summary>
|
|
|
|
+function FormatSize(ASize: Int64): string;
|
|
|
|
+
|
|
|
|
+/// <summary>
|
|
|
|
+/// 文件大小字符串转数字
|
|
|
|
+/// 1[b] "1 k[b]" " 1 m[b] " 1g[b] 1t[b]
|
|
|
|
+/// </summary>
|
|
|
|
+function SizeStrToInt(ASize: string; ADefault: Int64 = 0): Int64;
|
|
|
|
+
|
|
|
|
+/// <summary>
|
|
|
|
+/// 文件大小单位转数字
|
|
|
|
+/// </summary>
|
|
|
|
+function SizeUnitToInt(AUnit: string): Int64; overload;
|
|
|
|
+/// <summary>
|
|
|
|
+/// 文件大小单位转数字
|
|
|
|
+/// </summary>
|
|
|
|
+function SizeUnitToInt(AUnit: Char): Int64; overload;
|
|
|
|
+
|
|
|
|
+/// <summary>
|
|
/// 是否中国手机号
|
|
/// 是否中国手机号
|
|
/// 13900000000
|
|
/// 13900000000
|
|
/// +8613900000000
|
|
/// +8613900000000
|
|
@@ -134,6 +158,44 @@ begin
|
|
FormatSeconds(Int64(AValue));
|
|
FormatSeconds(Int64(AValue));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function FormatSize(ASize: Int64): string;
|
|
|
|
+var
|
|
|
|
+ AIdx, R1, s1: Int64;
|
|
|
|
+ AIsNeg: Boolean;
|
|
|
|
+const
|
|
|
|
+ Units: array [0 .. 6] of string = ('EB', 'PB', 'TB', 'GB', 'MB', 'KB', 'B');
|
|
|
|
+begin
|
|
|
|
+ AIsNeg := (ASize < 0);
|
|
|
|
+ AIdx := 6;
|
|
|
|
+ R1 := 0;
|
|
|
|
+ if AIsNeg then
|
|
|
|
+ ASize := -ASize;
|
|
|
|
+ Result := '';
|
|
|
|
+ while (AIdx >= 0) do
|
|
|
|
+ begin
|
|
|
|
+ s1 := ASize mod 1024;
|
|
|
|
+ ASize := ASize shr 10;
|
|
|
|
+ if (ASize = 0) or (AIdx = 0) then
|
|
|
|
+ begin
|
|
|
|
+ R1 := R1 * 100 div 1024;
|
|
|
|
+ if R1 > 0 then
|
|
|
|
+ begin
|
|
|
|
+ if R1 >= 10 then
|
|
|
|
+ Result := IntToStr(s1) + '.' + IntToStr(R1) + Units[AIdx]
|
|
|
|
+ else
|
|
|
|
+ Result := IntToStr(s1) + '.' + '0' + IntToStr(R1) + Units[AIdx];
|
|
|
|
+ end
|
|
|
|
+ else
|
|
|
|
+ Result := IntToStr(s1) + Units[AIdx];
|
|
|
|
+ Break;
|
|
|
|
+ end;
|
|
|
|
+ R1 := s1;
|
|
|
|
+ Dec(AIdx);
|
|
|
|
+ end;
|
|
|
|
+ if AIsNeg then
|
|
|
|
+ Result := '-' + Result;
|
|
|
|
+end;
|
|
|
|
+
|
|
function IsChineseMobileNumber(S: string; AOnlyNum: Boolean): boolean;
|
|
function IsChineseMobileNumber(S: string; AOnlyNum: Boolean): boolean;
|
|
var
|
|
var
|
|
p: PChar;
|
|
p: PChar;
|
|
@@ -170,4 +232,81 @@ begin
|
|
Result := i = 11; //中国手机号 11位
|
|
Result := i = 11; //中国手机号 11位
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function SizeUnitToInt(AUnit: Char): Int64;
|
|
|
|
+const
|
|
|
|
+ Units: array [0 .. 6] of Char = ('b', 'k', 'm', 'g', 't', 'p', 'e');
|
|
|
|
+var
|
|
|
|
+ I: Integer;
|
|
|
|
+begin
|
|
|
|
+ Result := 1;
|
|
|
|
+
|
|
|
|
+ for I := Low(Units) to High(Units) do begin
|
|
|
|
+ if (I > 0) then
|
|
|
|
+ Result := Result * 1024;
|
|
|
|
+ if AUnit = Units[I] then
|
|
|
|
+ Exit;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ Result := 1;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function SizeUnitToInt(AUnit: string): Int64;
|
|
|
|
+var
|
|
|
|
+ LSize: string;
|
|
|
|
+begin
|
|
|
|
+ Result := 1;
|
|
|
|
+
|
|
|
|
+ LSize := Trim(AUnit);
|
|
|
|
+ case Length(LSize) of
|
|
|
|
+ 1,2: Result := SizeUnitToInt(LSize[Low(LSize)]);
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function SizeStrToInt(ASize: string; ADefault: Int64): Int64;
|
|
|
|
+var
|
|
|
|
+ p: PChar;
|
|
|
|
+ c: Char;
|
|
|
|
+ s: string;
|
|
|
|
+begin
|
|
|
|
+ Result := ADefault;
|
|
|
|
+
|
|
|
|
+ if Length(ASize) = 0 then
|
|
|
|
+ Exit;
|
|
|
|
+
|
|
|
|
+ s := '';
|
|
|
|
+ c := #0;
|
|
|
|
+ p := PChar(ASize);
|
|
|
|
+ while p^ <> #0 do
|
|
|
|
+ case p^ of
|
|
|
|
+ 'b', 'k', 'm', 'g', 't', 'p', 'e':
|
|
|
|
+ begin
|
|
|
|
+ if c <> #0 then
|
|
|
|
+ Exit;
|
|
|
|
+ c := p^;
|
|
|
|
+ Inc(p);
|
|
|
|
+ if p^ = 'b' then
|
|
|
|
+ Inc(p);
|
|
|
|
+ end;
|
|
|
|
+ '0' .. '9':
|
|
|
|
+ begin
|
|
|
|
+ if c <> #0 then
|
|
|
|
+ Exit;
|
|
|
|
+ s := s + p^;
|
|
|
|
+ Inc(p);
|
|
|
|
+ end;
|
|
|
|
+ ',':
|
|
|
|
+ begin
|
|
|
|
+ if c <> #0 then
|
|
|
|
+ Exit;
|
|
|
|
+ Inc(p);
|
|
|
|
+ end;
|
|
|
|
+ ' ':
|
|
|
|
+ Inc(p);
|
|
|
|
+ else
|
|
|
|
+ Exit;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ Result := StrToUInt64Def(s, Result) * SizeUnitToInt(c);
|
|
|
|
+end;
|
|
|
|
+
|
|
end.
|
|
end.
|