| 
					
				 | 
			
			
				@@ -2,7 +2,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 {                                                       }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 {       Methods of Sting                                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 {                                                       }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{       版权所有 (C) 2020 KngStr                        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{       CopyRight (C) 2018-2020 KngStr                  }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{                                                       }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{   Some Code from                                      }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{     QDAC of swish                                     }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{   Thanks                                              }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 {                                                       }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 {*******************************************************}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,6 +41,26 @@ function FormatSeconds(const AValue: Integer): string; overload; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function FormatSeconds(const AValue: Double): string; overload;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /// <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
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ///  +8613900000000
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -134,6 +158,44 @@ begin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   FormatSeconds(Int64(AValue));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   p: PChar;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -170,4 +232,81 @@ begin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Result := i = 11; //中国手机号 11位
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.
 
			 |