mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 19:49:31 +02:00
* SafeFormat and helper function to convert array of const to string in a safe manner
This commit is contained in:
parent
3d08253192
commit
6ff542a13e
@ -1141,6 +1141,23 @@ begin
|
||||
Result:=Format(Fmt,Args,DefaultFormatSettings);
|
||||
end;
|
||||
|
||||
function SafeFormat (const Fmt: AnsiString; Args: array of const): UTF8String;
|
||||
|
||||
begin
|
||||
Result:=SafeFormat(Fmt,Args,DefaultFormatSettings);
|
||||
end;
|
||||
|
||||
function SafeFormat (const Fmt: AnsiString; Args: array of const; const FormatSettings: TFormatSettings): UTF8String;
|
||||
|
||||
begin
|
||||
try
|
||||
Result:=Format(Fmt,Args,FormatSettings);
|
||||
except
|
||||
On E : Exception do
|
||||
Result:='Error "'+E.ClassName+'" during format('''+Fmt+''',['+ArrayOfConstToStr(Args,',','{','}')+']) : '+E.Message;
|
||||
end;
|
||||
end;
|
||||
|
||||
Function FormatBuf (Var Buffer; BufLen : Cardinal; Const Fmt; fmtLen : Cardinal; Const Args : Array of const; Const FormatSettings: TFormatSettings) : Cardinal;
|
||||
|
||||
Var S,F : String;
|
||||
|
@ -338,3 +338,5 @@ Type
|
||||
Type
|
||||
TStringBuilder = TAnsiStringBuilder;
|
||||
|
||||
function SafeFormat (const Fmt: AnsiString; Args: array of const; const FormatSettings: TFormatSettings): UTF8String; overload;
|
||||
function SafeFormat (const Fmt: AnsiString; Args: array of const): UTF8String; overload;
|
||||
|
@ -365,3 +365,9 @@ const
|
||||
ufImplicitUnit = $10;
|
||||
|
||||
ufWeakPackageUnit = ufPackageUnit or ufWeakUnit;
|
||||
|
||||
Type
|
||||
TUTF8StringDynArray = Array of UTF8String;
|
||||
|
||||
Function ArrayOfConstToStr(Args: array of const ; aSeparator : Char = ','; aQuoteBegin : Char = '"'; aQuoteEnd : Char = '"') : UTF8String;
|
||||
Function ArrayOfConstToStrArray(Args: array of const) : TUTF8StringDynArray;
|
||||
|
@ -837,3 +837,91 @@ begin
|
||||
Result:=ifFalse;
|
||||
end;
|
||||
{$ENDIF}
|
||||
|
||||
Function ArrayOfConstToStrArray(Args: array of const) : TUTF8StringDynArray;
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
O : TObject;
|
||||
C : TClass;
|
||||
S : String;
|
||||
|
||||
begin
|
||||
SetLength(Result,Length(Args));
|
||||
for i:=Low(Args) to High(Args) do
|
||||
case Args[i].VType of
|
||||
vtInteger: Result[i]:=IntToStr(Args[i].VInteger);
|
||||
vtBoolean: Result[i]:=BoolToStr(Args[i].VBoolean);
|
||||
vtChar: Result[i] := Args[i].VChar;
|
||||
{$ifndef FPUNONE}
|
||||
vtExtended: Result[i]:= FloatToStr(Args[i].VExtended^);
|
||||
{$ENDIF}
|
||||
vtString: Result[i] := Args[i].VString^;
|
||||
vtPointer: Result[i] := '0x'+HexStr(PtrInt(Args[i].VPointer),SizeOF(PtrInt));
|
||||
vtPChar: Result[i] := Args[i].VPChar;
|
||||
vtObject:
|
||||
begin
|
||||
O:=Args[i].VObject;
|
||||
if Assigned(O) then
|
||||
begin
|
||||
try
|
||||
S:=O.ClassName;
|
||||
except
|
||||
S:='<Invalid instance>';
|
||||
end;
|
||||
end
|
||||
else
|
||||
S:='';
|
||||
Result[I] := '<Object '+S+' 0x'+HexStr(PtrInt(O),SizeOF(PtrInt))+'>';
|
||||
end;
|
||||
vtClass:
|
||||
begin
|
||||
C:=Args[i].VClass;
|
||||
if Assigned(C) then
|
||||
begin
|
||||
try
|
||||
S:=C.ClassName;
|
||||
except
|
||||
S:='<Invalid Class>';
|
||||
end;
|
||||
end
|
||||
else
|
||||
S:='';
|
||||
Result[I] := '<Class '+S+' 0x'+HexStr(PtrInt(C),SizeOF(PtrInt))+'>';
|
||||
end;
|
||||
vtWideChar: Result[i] := UTF8Encode(Args[i].VWideChar);
|
||||
vtPWideChar: Result[i] := UTF8Encode(Args[i].VPWideChar^);
|
||||
vtAnsiString: Result[i] := AnsiString(Args[i].VAnsiString);
|
||||
vtCurrency: Result[i] := FLoatToSTr(Args[i].VCurrency^);
|
||||
vtVariant: Result[i] := Args[i].VVariant^;
|
||||
vtInterface: Result[I] := '<Interface 0x'+HexStr(PtrInt(Args[i].VInterface),SizeOF(PtrInt))+'>';
|
||||
vtWidestring: Result[i] := UTF8ENcode(WideString(Args[i].VWideString));
|
||||
vtInt64: Result[i] := IntToStr(Args[i].VInt64^);
|
||||
vtQWord: Result[i] := IntToStr(Args[i].VQWord^);
|
||||
vtUnicodeString:Result[i] := UTF8Encode(UnicodeString(Args[i].VUnicodeString));
|
||||
end;
|
||||
end;
|
||||
|
||||
Function ArrayOfConstToStr(Args: array of const ; aSeparator : Char = ','; aQuoteBegin : Char = '"'; aQuoteEnd : Char = '"') : UTF8String;
|
||||
|
||||
Procedure Add(s: UTF8String);
|
||||
|
||||
begin
|
||||
if aQuoteBegin<>#0 then
|
||||
S:=aQuoteBegin+S;
|
||||
if aQuoteEnd<>#0 then
|
||||
S:=S+aQuoteEnd;
|
||||
if Result<>'' then
|
||||
Result:=Result+aSeparator;
|
||||
Result:=Result+S;
|
||||
end;
|
||||
|
||||
|
||||
Var
|
||||
S : UTF8String;
|
||||
|
||||
begin
|
||||
Result:='';
|
||||
For S in ArrayOfConstToStrArray(Args) do
|
||||
Add(S);
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user