[Overview][Constants][Types][Classes][Procedures and functions][Variables] | Reference for unit 'sysutils' (#rtl) |
Format a string with given arguments.
Source position: line 0
function Format( |
const Fmt: String; |
const Args: array of Const |
):String; |
const Fmt: String; |
const Args: array of Const; |
const FormatSettings: TFormatSettings |
):String; |
Format replaces all placeholders inFmt with the arguments passed in Args and returns the resulting string. A placeholder looks as follows:
'%' [Index':'] ['-'] [Width] ['.' Precision] ArgType
elements between single quotes must be typed as shown without the quotes, and elements between square brackets [ ] are optional. The meaning of the different elements is shown below:
The Index, Width and Precision parameters can be replaced by *, in which case their value will be read from the next element in the Args array. This value must be an integer, or an EConvertError exception will be raised.
The argument type is determined from ArgType. It can have one of the following values (case insensitive):
Scientific format. The next argument in the Args array should be a Floating point value. The argument is converted to a decimal string using scientific notation, using FloatToStrF, where the optional precision is used to specify the total number of decimals. (defalt a valueof 15 is used). The exponent is formatted using maximally 3 digits.
In short, the E specifier formats it's argument as follows:
FloatToStrF(Argument,ffexponent,Precision,3)
Fixed point format. The next argument in the Args array should be a floating point value. The argument is converted to a decimal string, using fixed notation (see FloatToStrF). Precision indicates the number of digits following the decimal point.
In short, the F specifier formats it's argument as follows:
FloatToStrF(Argument,ffFixed,ffixed,9999,Precision)
General number format. The next argument in the Args array should be a floating point value. The argument is converted to a decimal string using fixed point notation or scientific notation, depending on which gives the shortest result. Precision is used to determine the number of digits after the decimal point.
In short, the G specifier formats it's argument as follows:
FloatToStrF(Argument,ffGeneral,Precision,3)
Currency format. the next argument in the var{Args} array must be a floating point value. The argument is converted to a decimal string using currency notation. This means that fixed-point notation is used, but that the currency symbol is appended. If precision is specified, then then it overrides the CurrencyDecimals global variable used in the FloatToStrF
In short, the M specifier formats it's argument as follows:
FloatToStrF(Argument,ffCurrency,9999,Precision)
In case of error, an EConversionError exception is raised. Possible errors are:
|
Format a string with given arguments and store the result in a buffer. |
Program example71; {$mode objfpc} { This program demonstrates the Format function } Uses sysutils; Var P : Pointer; fmt,S : string; Procedure TestInteger; begin Try Fmt:='[%d]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%%]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%10d]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); fmt:='[%.4d]';S:=Format (fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%10.4d]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:d]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10d]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10.4d]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10d]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10.4d]';S:=Format (fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%-*.*d]';S:=Format (fmt,[4,5,10]);writeln(Fmt:12,' => ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; Procedure TestHexaDecimal; begin try Fmt:='[%x]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%10x]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%10.4x]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:x]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10x]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10.4x]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10x]';S:=Format (Fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10.4x]';S:=Format (fmt,[10]);writeln(Fmt:12,' => ',s); Fmt:='[%-*.*x]';S:=Format (fmt,[4,5,10]);writeln(Fmt:12,' => ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; Procedure TestPointer; begin P:=Pointer(1234567); try Fmt:='[0x%p]';S:=Format (Fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[0x%10p]';S:=Format (Fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[0x%10.4p]';S:=Format (Fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[0x%0:p]';S:=Format (Fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[0x%0:10p]';S:=Format (Fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[0x%0:10.4p]';S:=Format (Fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[0x%0:-10p]';S:=Format (Fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[0x%0:-10.4p]';S:=Format (fmt,[P]);writeln(Fmt:12,' => ',s); Fmt:='[%-*.*p]';S:=Format (fmt,[4,5,P]);writeln(Fmt:12,' => ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; Procedure TestString; begin try Fmt:='[%s]';S:=Format(fmt,['This is a string']);Writeln(fmt:12,'=> ',s); fmt:='[%0:s]';s:=Format(fmt,['This is a string']);Writeln(fmt:12,'=> ',s); fmt:='[%0:18s]';s:=Format(fmt,['This is a string']);Writeln(fmt:12,'=> ',s); fmt:='[%0:-18s]';s:=Format(fmt,['This is a string']);Writeln(fmt:12,'=> ',s); fmt:='[%0:18.12s]';s:=Format(fmt,['This is a string']);Writeln(fmt:12,'=> ',s); fmt:='[%-*.*s]';s:=Format(fmt,[18,12,'This is a string']);Writeln(fmt:12,'=> ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; Procedure TestExponential; begin Try Fmt:='[%e]';S:=Format (Fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%10e]';S:=Format (Fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%10.4e]';S:=Format (Fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:e]';S:=Format (Fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10e]';S:=Format (Fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10.4e]';S:=Format (Fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10e]';S:=Format (Fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10.4e]';S:=Format (fmt,[1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%-*.*e]';S:=Format (fmt,[4,5,1.234]);writeln(Fmt:12,' => ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; Procedure TestNegativeExponential; begin Try Fmt:='[%e]';S:=Format (Fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%10e]';S:=Format (Fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%10.4e]';S:=Format (Fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:e]';S:=Format (Fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10e]';S:=Format (Fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10.4e]';S:=Format (Fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10e]';S:=Format (Fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10.4e]';S:=Format (fmt,[-1.234]);writeln(Fmt:12,' => ',s); Fmt:='[%-*.*e]';S:=Format (fmt,[4,5,-1.234]);writeln(Fmt:12,' => ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; Procedure TestSmallExponential; begin Try Fmt:='[%e]';S:=Format (Fmt,[0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%10e]';S:=Format (Fmt,[0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%10.4e]';S:=Format (Fmt,[0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:e]';S:=Format (Fmt,[0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10e]';S:=Format (Fmt,[0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10.4e]';S:=Format (Fmt,[0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10e]';S:=Format (Fmt,[0.0123]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10.4e]';S:=Format (fmt,[0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%-*.*e]';S:=Format (fmt,[4,5,0.01234]);writeln(Fmt:12,' => ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; Procedure TestSmallNegExponential; begin Try Fmt:='[%e]';S:=Format (Fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%10e]';S:=Format (Fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%10.4e]';S:=Format (Fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:e]';S:=Format (Fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10e]';S:=Format (Fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:10.4e]';S:=Format (Fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10e]';S:=Format (Fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%0:-10.4e]';S:=Format (fmt,[-0.01234]);writeln(Fmt:12,' => ',s); Fmt:='[%-*.*e]';S:=Format (fmt,[4,5,-0.01234]);writeln(Fmt:12,' => ',s); except On E : Exception do begin Writeln ('Exception caught : ',E.Message); end; end; writeln ('Press enter'); readln; end; begin TestInteger; TestHexadecimal; TestPointer; TestExponential; TestNegativeExponential; TestSmallExponential; TestSmallNegExponential; teststring; end.
No notes exist for this page yet.