Übrigens spricht aus Nichts dagegen, Format zu erweitern bzw. neu zu implementieren. Der Code ist denkbar einfach:
Delphi-Quellcode:
// Hingehackt von Alzaimar irgendwann 2003
Function csFormat(aFormatStr: String; Arg: Array Of Variant): String;
Var
i, p: Integer;
Procedure _Format;
Var
j, n: Integer;
r, fmt: String;
Begin
Inc(i);
If aFormatStr[i] = '%' Then Begin
Result := Result + aFormatStr[i];
Inc(i)
End
Else Begin
If aFormatStr[i] In ['0'..'9'] Then Begin
j := i; While aFormatStr[i] In ['0'..'9', '*'] Do Inc(i);
N := StrToIntDef(Copy(aFormatStr, j, i - j), -1);
If aFormatStr[i] = ':' Then // Index specifier
p := N
Else i := j;
End;
j := i;
If aFormatStr[i] = '-' Then Inc(i);
While aFormatStr[i] In ['0'..'9', '*'] Do Inc(i);
If aFormatStr[i] = '.' Then Inc(i);
While aFormatStr[i] In ['0'..'9', '*'] Do Inc(i);
Inc(i);
fmt := '%' + Copy(aFormatStr, j, i - j);
Case upcase(aFormatStr[i - 1]) Of
'D', 'U', 'X':
r := Format(fmt, [integer(Arg[p])]);
'F', 'E', 'G', 'N', 'M':
r := Format(fmt, [Double(Arg[p])]);
Else
r := Format(fmt, [Arg[p]]);
End;
Result := Result + r;
Inc(p);
End
End;
Begin
i := 1;
p := Low(Arg);
Result := '';
While i <= Length(aFormatStr) Do
If aFormatStr[i] = '%' Then
_Format
Else {Hier käme der Code für \n \t etc. rein else } Begin
Result := Result + aFormatStr[i];
Inc(i)
End;
End;
NB: Eventuell fehlt etwas, und nicht 100% kompatibel, da die Argumente als 'Variant Array' und nicht als 'Array Of Const' übergeben werdem. Ist aber leicht anzupassen, nur sind die 'Array Of Const' etwas umständlicher zu handhaben.