Arch manual pages

format(3tcl) Tcl Built-In Commands format(3tcl)


format - 按 sprintf 的式樣格式化一個字符串

format formatString ?arg arg ...?

這個命令按與ANSI C sprintf 過程相同的方式生成一個格式化了的字符串(在它的實現中使用了 sprintf)。FormatString 指示如何格式化結果,與 sprintf 一樣使用 % 轉換指定符(specifier),如果有增添的參數,則它們提供要被替換到結果中的值。format 的返回值是格式化了的字符串。

命令按從左到右的檢索(scan) formatString 的方式操作。除了百分號之外的在格式字符串中的每個字符都要添加到結果字符串上。如果字符是一個 %則它不被複制到結果字符串中。轉而,在 % 後面的字符被作爲一個轉換指定符對待。轉換指定符控制把下一個連續的(successive) arg 轉換成一個特定的格式,並把結果添加到結果字符串中轉換指定符的位置上。如果在格式字符串中有多個轉換指定符,則每一個控制一個增添的參數 argformat 命令必須給出足夠的 args 來滿足在 formatString 中的所有轉換指定符的需要。

每個轉換指定符可以由六部分組成: 一個 XPG3 位置指定符,一系列標誌(flag),一個最小字段寬度,一個精度,一個長度修飾符(modifier),和一個轉換字符。除了轉換字符之外可以省略這些字段中的任何一個。存在的字段必須按上面給出的次序出現。下面的段落依次討論所有這些字段。

如果 % 跟隨着一個十進制數值和一個 $, 比如“%2$d”,則要轉換的值不接受下一個順序的參數。轉而,它接受由這個數字指示的參數,這裏 1 對應於第一個 arg。如果因爲在指定符中有 * 字符而轉換指定符要求多個參數,則使用連續的參數,開始的參數由這個數值給出。這依從 XPG3 定位指定符約定。如果在 formatString 中有任何定位的指定符則所有指定符必須定位。

一個轉換指定符的第二部分可以按任意次序包含任何下列的標誌字符:

-
指定被轉換的參數在它的字段中左對齊(數值一般右對齊,如果需要的話,有前導的空格)。
+
指定輸出的數值必須有符號,即使是正數。
space
指定如果數值的第一個字符不是一個符號則向數值的開始處添加空格。
0
指定應當在數值的左側填充零而不是空格。
#
要求一中替代的輸出形式。對於 oO 轉換它保證第一個數字總是 0。對於 xX 轉換,除了零之外,在結果的開始處(分別)添加 0x0X。對於所有浮點數轉換(eEfg、和 G) 它保證結果總是一個小數點。對於 gG 轉換它指定刪除尾部的零。

一個轉換指定符的第三部分是給出這個轉換的最小字段寬度的一個數字。它典型的被用來按列表的(tabular)輸出形式排列(line up)各列(column)。如果被轉換的參數包含的字符比這個最小字段寬度少,則填充它來達到這個最小的字段寬度。填充通常是在被轉換的參數的左側添加額外的空格,但是可以使用 0- 標誌來分別指定在左側填充零或在右側填充空格。如果指定最小字段寬度爲 * 而不是一個數值,則用給 format 命令的下一個參數確定最小字段寬度;它必須是一個數值字符串。

一個轉換指定符的第四部分是一個精度,它由一個點號和隨後的一個數值組成。在不同的轉換中按不同的方式使用這個數值。對於 eE、和 f 轉換它指定出現在小數點右側的數字的位數。對於 gG 轉換它指定出現的數字的總數,包括在小數點兩側的數字(但是,除非指定了 # 標誌,省略在小數點後面的尾部的零)。對於正數轉換,它指定輸出的最小的數字位數(如果需要的話添加前導的零)。對於 s 轉換它指定輸出的最大的字符數;如果字符串比它長則刪除尾部的字符。如果用 * 而不是一個數值來指定精度,則用給 format 命令的下一個參數來確定精度;它必須是一個數值字符串。

一個轉換指定符的第五部分是一個長度修飾符,它必須是 hl。如果它是 h 則指定數值值在轉換之前必須被截斷(truncate)成16位值。這個選項很少有用。忽略 l 修飾符。

一個轉換指定符的最後一部分是確定進行那種轉換的一個字母字符。當前支持下列轉換字符:

d
把整數轉換成有符號的十進制字符串。
u
把整數轉換成無符號的十進制字符串。
i
把整數轉換成有符號的十進制字符串;整數可以是十進制的,八進制的(有一個前導的 0) 或十六進制的(有一個前導的 0x)。
o
把整數轉換成無符號八進制字符串。
x or X
把整數轉換成無符號十六進制字符串,對 x 使用數字“0123456789abcdef”而對 X 使用數字 “0123456789ABCDEF”。
c
把整數轉換成它代表的 Unicode 字符。
s
不轉換,只是插入字符。
f
浮點數轉換成有符號的 xx.yyy 形式的十進制字符串,這裏的 y 的位數由精度確定(缺省: 6)。如果精度是 0 則不輸出小數點。
e or e
把浮點數轉換成 x.yyye±zz 形式的科學記數法,這裏的 y 的位數由精度確定(缺省: 6)。如果精度是 0 則不輸出小數點。如果使用 E 式樣則輸出 E 而不是 e
g or G
如果指數小於 -4 或大於等於精度,則把富點數按 %e%E 來轉換。否則按 %f 轉換。省略尾部的零和尾部的小數點。
%
不轉換: 只是插入 %

數值轉換,被轉換的參數必須是一個正數或浮點數字符串;format 把參數轉換成二進制接着依照轉換指定符把它再轉換成一個字符串。

除了下列區別之外,format 命令的行爲與 ANSI C sprintf 過程相同:
[1]
當前不支持 %p%n 指定符。
[2]
對於 %c 轉換,參數必須是一個十進制字符串,它將被轉換成相應的字符值。
[3]
忽略 l 修飾符;轉換整數值總是有如沒有修飾符存在,而轉換實數值總是有如存在 l 修飾符(例如, 使用類型 double 作爲內部表示)。如果指定了 h 修飾符則在轉換前截斷整數值。

sprintf(3), string(n)

conversion specifier, format, sprintf, string, substitution

寒蟬退士

2001/08/29

http://cmpp.linuxforum.net

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
8.1 Tcl