StringFormat

首页  后退  前进

StringFormat
down2

StringFormat

返回格式化字符串(类似 C 语言的 sprintf() 函数).

 

StringFormat ( "format control", var1 [, ... var32] )

参数

format control

使用的格式和标志 (见备注).

var1...var32

最多 32 个依照 "format control" 输出的变量.

返回值

根据"format control"参数指定的格式返回格式化字符串.

备注

为避免缓冲器溢出,每个 " 变量 " 被限制为 65535个字符.

转义字符可以包含在 "format control" 参数中, 例如: \n (@LF), \r (@CR), \t (@TAB].

如果希望有一个 "\", 需要使用: \\, 同样一个 "%" 应使用: %%.

 

"variable format" ; %[flags] [width] [.precision] type ( %[标志] [宽度] [.精度] 类型 )

 

如果格式规范无效, 则特性不确定. 如果输入无效, 您可以创建处理这样的异常情况的代码, 并终止程序.

 

  Width(宽度)约定

 

"format control" 的第二可选字段是[width][宽度]. 参数是一个非负十进制整数, 控制打印字符的最小数目. 如果输出字符数小于指定的宽度, 空白符被加到输出值的左边或右边[根据标志决定], 使其达到最小宽度. 如果宽度前缀为 0, 则添加 0, 直到最小宽度为止 (不使用左对齐时).

 

宽度约定不会引起输出值被截断. 如果字符的输出数比指定的宽度大, 或宽度没有设定, 所有字符值都将被打印 (依照精度约定).

 

  Type(类型)描述

 

类型

变量类型

输出格式

d, i

整数

带符号十进制整数

o

整数

无符号八进制整数

u

整数

无符号十进制整数

x

整数

无符号十六进制整数, 使用小写 "abcdef"

X

整数

无符号十六进制整数, 使用大写 "ABCDEF"

e

浮点

带符号数值, 形如: [ - ]d.dddd e [sign]ddd,

其中 d 是一个单一的十进制数字,

dddd 是一或多位小数,

ddd 是精确的三位小数,

sign 为 + 或 -

E

浮点

等同于 e 格式, 只是改用 E 而非 e 作为指数.

f

浮点

带符号数值, 形如: [ - ]dddd.dddd,

其中 dddd 是一个或多个十进制数字.

该数字小数点前的数位取决于数字的大小, 小数点后的数位取决于所要求的精度

g

浮点

fe 格式打印带符号值, 无论哪一个给定值和精度都是以紧凑格式打印.

e 格式用在值指数小于 -4 或大于等于精度参数时, 尾随零被切断,

而且十进制小数点只在有一或较多数字跟随时出现

G

浮点

等同于 g 格式, 但使用 E, 而不是 e 作为指数 (如适用)

s

字符串

字符串

 

  Flag(标志)约定

 

标志

意义

默认值

-

在给定字段宽度内左对齐结果.

右对齐.

+

如果输出值是带符号类型, 输出值前缀使用符号(+ 或 -).

仅当负值时出现负号 (-).

0

如果宽度以 0 开头, 则添加 0 到最小宽度.

如果 0 和 - 出现, 0 被忽略.

如果 0 与整数格式(i, u, x, X, o, d)一起指定, 0 被忽略.

不添加 0.

Blank

如果输出值为带符号的正值, 则输出数值前缀用一个空白符;

如果空白符和 + 标志同时出现, 空白符被忽略.

不出现空白符.

#

使用 o, x, 或 X 格式时,

标志 # 表示任何非零输出值前缀分别使用 0, 0x, 或 0X.

不出现空白符.

#

使用 e, E, or f 格式时,

标志 # 强制输出值在所有情况下都包含一个十进制小数点.

只在有数字跟随时出现十进制小数点.

#

使用 gG 格式时, 标志 # 强制输出值在所有情况下都包含一个十进制小数点,并且避免截断尾随零.

使用 d, i, u, 或 s 格式时忽略. 只在有数字跟随时, 十进制小数点才会出现. 并截断尾随零.

只在有数字跟随是出现十进制小数点.

截断尾随零

 

  Precision(精度)约定

 

"format control" 的第三可选字段是[.precision][.精度].

它指定一个非负十进制整数, 之前有一个句点 (.), 指定要打印的字符数, 小数位数, 或有效位数(见下表).

不同于宽度约定, 精度约定能引起输出值或浮点值的四舍五入结果被截断.

如果精度被指定为 0, 且要转换的值也是 0, 结果是没有任何字符输出. 像下面语句:

 

StringFormat( "%.0d", 0 ); /* 没有字符返回 */

 

  精度值如何影响类型

 

类型

意义

默认值

d, i, u, o, x, X

"精度"指定打印的最小位数.

如果位数变量小于精度值, 输出值左边由 0 填补. 当位数超过精度, 不截断输出值.

默认精度为 1.

e, E

"精度"指定十进制小数点后的打印位数. 最后打印值将四舍五入.

默认精度 6; 如果精度为 0 或句点(.), 没有跟随其它数, 则不打印十进制小数点.

f

"精度"指定小数点后的位数. 如果出现十进制小数点,

则在它之前至少应出现一位数字. 该值将四舍五入为适当的数字.

默认精度 6; 如果精度为 0 或句点(.), 没有跟随其它数, 则不打印十进制小数点.

g, G

"精度"指定有效打印位数.

打印六位有效数字, 任何尾随零截断.

s

"精度"指定打印的最大字符数. 超过精度的字符不打印.

打印字符, 直到遇到空字符为止.

函数示例

Example()
Func Example()
    Local $iInt_Unsigned = 43951789
    Local $iInt_Negative = -43951789
    ConsoleWrite(@CRLF & "Numeric Formats" & @CRLF)
    PrintFormat($iInt_Unsigned, "%d", "standard positive integer with no sign", 1) ; 43951789
    PrintFormat($iInt_Negative, "%d", "standard negative integer with sign", 1) ; -43951789
    PrintFormat($iInt_Unsigned, "%i", "standard integer", 1) ; 43951789
    PrintFormat($iInt_Unsigned, "%09i", "9 digits with leading zero", 1) ; 043951789
    PrintFormat($iInt_Unsigned, "%e", "scientific notation") ; 4.395179e+007
    PrintFormat($iInt_Unsigned, "%u", "unsigned integer with positive integer", 1) ; 43951789
    PrintFormat($iInt_Negative, "%u", "unsigned integer with negative integer", 1) ; 4251015507
    PrintFormat($iInt_Unsigned, "%f", "floating point") ; 43951789.000000
    PrintFormat($iInt_Unsigned, "%.2f", "floating point with 2 digits after decimal point", 1) ; 43951789.00
    PrintFormat($iInt_Unsigned, "%o", "octal", 1) ; 247523255
    PrintFormat($iInt_Unsigned, "%s", "string", 1) ; 43951789
    PrintFormat($iInt_Unsigned, "%x", "hexadecimal (lower-case)", 1) ; 29ea6ad
    PrintFormat($iInt_Unsigned, "%X", "hexadecimal (upper-case)", 1) ; 29EA6AD
    PrintFormat($iInt_Unsigned, "%+d", "sign specifier on a positive integer", 1) ; +43951789
    PrintFormat($iInt_Negative, "%+d", "sign specifier on a negative integer", 1) ; -43951789
    Local $sString = "string"
    Local $sString_Long = "longstring"
    ConsoleWrite(@CRLF & "String Formats - [ ] used to show beginning/end of string" & @CRLF)
    PrintFormat($sString, "[%s]", "standard string", 1) ; [string]
    PrintFormat($sString, "[%10s]", "10 chars right justified with added spaces") ; [    string]
    PrintFormat($sString, "[%-10s]", "10 chars left justified with added spaces") ; [string    ]
    PrintFormat($sString_Long, "[%10.8s]", "right justified but precision 8 so truncated") ; [  longer s]
    PrintFormat($sString_Long, "[%-10.8s]", "left justifed but precision 8 so truncated") ; [longer s  ]
    PrintFormat($sString, "[%010s]", "10 chars with leading zero") ; [0000string]
    ConsoleWrite(@CRLF & "Date Format - each % uses a new parameter" & @CRLF)
    ConsoleWrite('"%02i\%02i\%04i" 0n (1, 9, 2013) => ' & StringFormat("%02i\%02i\%04i", 1, 9, 2013) & @CRLF & @CRLF)
EndFunc   ;==>Example
Func PrintFormat($vVar, $sFormat, $sExplan, $iTab = 0)
    ConsoleWrite('"' & $sFormat & '" on ' & $vVar & @TAB & ' => ' & StringFormat($sFormat, $vVar))
    If $iTab Then ConsoleWrite(@TAB)
    ConsoleWrite(@TAB & " ; " & $sExplan & @CRLF)
EndFunc   ;==>PrintFormat

----------------------------------------

该函数可以通过命令 exect 调用

例子
copy

exect=$var_i=5||$var_s=StringFormat('%%08s',$var_i)||_ViewValues('$var_s') ;; 将前导零添加到数字5的示例

up2


tcimage © Аверин Андрей для Total Commander Image Averin-And@yandex.ru