73 lines
2.2 KiB
ObjectPascal
73 lines
2.2 KiB
ObjectPascal
unit ANBFormatString;
|
|
{$MODE Delphi}
|
|
{$codepage UTF8}
|
|
interface
|
|
uses StrUtils, SysUtils, VCLEx;
|
|
{stdcalls}
|
|
function FormatStr(const AFrmtdStr: String; const AArgs, AArgsValues: array of String): String; STDCALL;
|
|
function FormatStrW(const AFrmtdStr: WideString; const AArgs, AArgsValues: array of WideString): WideString; STDCALL;
|
|
implementation
|
|
function SearchAndReplaceStr(const AStr, ASearchStr, AReplaceStr: String): String;
|
|
var CurrDelim, NextDelim: IntEx;
|
|
ElemName, s: String;
|
|
begin
|
|
s:= '';
|
|
CurrDelim:= 1;
|
|
repeat
|
|
NextDelim:= PosEx(ASearchStr, AStr, CurrDelim);
|
|
if NextDelim = 0 then
|
|
NextDelim:= Length(AStr) + 1;
|
|
ElemName:= Copy(AStr, CurrDelim, NextDelim - CurrDelim);
|
|
if not (NextDelim > Length(AStr)) then
|
|
s:= s + ElemName + AReplaceStr
|
|
else
|
|
s:= s + ElemName;
|
|
CurrDelim:= NextDelim + Length(ASearchStr);
|
|
until CurrDelim > Length(AStr);
|
|
Result:= s;
|
|
end;
|
|
{Only for Windows}
|
|
function SearchAndReplaceStrW(const AStr, ASearchStr, AReplaceStr: WideString): WideString;
|
|
var CurrDelim, NextDelim: IntEx;
|
|
ElemName, s: WideString;
|
|
begin
|
|
s:= '';
|
|
CurrDelim:= 1;
|
|
repeat
|
|
NextDelim:= PosEx(ASearchStr, AStr, CurrDelim);
|
|
if NextDelim = 0 then
|
|
NextDelim:= Length(AStr) + 1;
|
|
ElemName:= Copy(AStr, CurrDelim, NextDelim - CurrDelim);
|
|
if not (NextDelim > Length(AStr)) then
|
|
s:= s + ElemName + AReplaceStr
|
|
else
|
|
s:= s + ElemName;
|
|
CurrDelim:= NextDelim + Length(ASearchStr);
|
|
until CurrDelim > Length(AStr);
|
|
Result:= s;
|
|
end;
|
|
function FormatStr(const AFrmtdStr: string; const AArgs, AArgsValues: array of String): String;
|
|
var i: IntEx;
|
|
s: String;
|
|
begin
|
|
s:= AFrmtdStr;
|
|
if High(AArgs) <> High(AArgsValues) then
|
|
raise Exception.Create('Array of arguments not equal array of its values!');
|
|
for i:= 0 to High(AArgs) do
|
|
s:= SearchAndReplaceStr(s, AArgs[i], AArgsValues[i]);
|
|
Result:= s;
|
|
end;
|
|
{Only for Windows}
|
|
function FormatStrW(const AFrmtdStr: WideString; const AArgs, AArgsValues: array of WideString): WideString;
|
|
var i: IntEx;
|
|
s: WideString;
|
|
begin
|
|
s:= AFrmtdStr;
|
|
if High(AArgs) <> High(AArgsValues) then
|
|
raise Exception.Create('Array of arguments not equal array of its values!');
|
|
for i:= 0 to High(AArgs) do
|
|
s:= SearchAndReplaceStrW(s, AArgs[i], AArgsValues[i]);
|
|
Result:= s;
|
|
end;
|
|
end.
|