format

ReferenceTOPKeywords

コマンド名

format - sprintfの形式で文字列をフォーマットします。

構文

format formatString ?arg arg ...?

概要

このコマンドはANSI C sprintf関数と同じ方法(その実装でsprintfを使用している)でフォーマットされた文字列を生成します。 formatStringは、sprintfと同様、%を変換指定子として使って結果をどのよ うにフォーマットするかを示し、引数は存在するなら、結果の中に置き換えられる値を提供します。 formatの戻り値はフォーマッ トされた文字列です。

フォーマットに関する詳細

-
+
space
0
#
d
u
i
o
x or X
c
s
f
e or e
g or G
%

このコマンドはformatStringを左から右へスキャンすることにより操作を行います。フォーマット(formatString)文字列の各文字は、パーセント記号でない限り、結果 文字列に追加されます。%文字がは結果文字列にはコピーされません。代わりに、%に続く文字が変換指定子として扱われます。 変換指定子は次に続くarg を特定のフォーマットに変換する方法を指定します。そして変換結果 は結果文字列の変換指定子の位置に追加されます。フォーマット文字列に複数の変換指定子がある場合、それぞれが1つの後続argを制御します。 formatコマンドはformatString のすべての変換指定子の必要に見合うだけの十分なargを与えられなければなりません。

各変換指定子は6つまでの異なる部分を含めます。XPG3位置指定子、フラグのセット、フィールドの最小幅、精度、長さ変更子、そして変換文字です。変換文字を除くこれらのフィールドいずれも省略することができます。出現するフィールドは上記で示した順に現れなければなりません。以下の説明ではこれらのフィールドのそれぞれについて順番に説明します。

"%2$d"のように、%の次に十進数の数字と$が続く場合、変換する値は次の順番の引数からはとりません。その代わり、数字が示す引数から値をとります。1が最初のargに相当します。変換指定子には、*文字が使われることで複数の引数を必要とする場合、数字で与えられた引数で始まって連続する引数が使われます。これは位置指定子のXPG3変換に従います。 formatStringの中に1つでも位置指定子があれば、すべての指定子は位置指定されなければなりません。

変換指定子の第2の部分には、次のフラグ文字を任意な順番で含むことができます。

-
変換される引数がフィールド内で左詰めされることを指定します (数値は普通、必要なら先頭にスペースを付けて右詰めされます)。
 
+
正の数であっても、数値は常に符号付きで表示されることを指定します。
space
最初の文字が符号でなければ、数値の始まりにスペースが追加されることを指定します。
0
数値の左側に、スペースではなく0で埋められることを指定します。
#
もう1つの出力形式を要求します。oO変換の場合、最初の数字が常に0であることを保証します。 xX変換の場合、(それぞれ)0x0Xは、結果が0でなければ、結果の先頭に付加されます。全ての浮動小数点数変換(eEfg、またG )は、結果が常に小数点を持っていることを保証します。 gG 変換の場合、末尾の0が削除されないことを指定します。

変換指定子の第3の部分はこの変換のためにフィールドの最小幅を与える数値です。これは一般的にテーブルフォーマットの出力でカラムを整列させるために使われます。変換される引数がフィールドの最小幅より少ない文字しかない場合、最小幅と同じに成るまで埋められます。隙間埋めは変換される引数の左側にスペースを付加することで行われます。0か-フラグをそれぞれ使うことで、左側を0で埋め、あるいは右側をスペースで埋めることを指定できます。最小フィールド幅が数値ではなく*で指定される場合、format コマンドの次の引数で最小フィールド幅を決めます。それは数値文字列でなければなりません。

変換指定子の第4の部分は精度です。それは数字が後に続くピリオドです。数字はそれぞれの変換では使い方は異なります。 eEf変換では小数点以降の数字の数を指定します。 gG変換では小数点の両側の数字が含まれる (しかし、#フラグが指定されていなけれな、小数点以降の末尾の0は省略される)数字の総数を指定します。整数変換では出力する数字の最小の数を指定します(必要なら先頭に0が付加される)。 s変換では出力される文字の最大数を指定します。文字列がこれより長いと末尾の文字が取り除かれます。精度が数値ではなく*で指定される場合、formatコマンドの次の引数で精度を決めます。それは数値文字列でなければなりません。

変換指定子の第5の部分は長さ変更子であり、hlでなければなりません。 hは数値が変換される前に16ビット値に切り捨てられることを指定します。このオプションはたまにしか有効ではありません。 l変更子は数値が(少なくとも)64ビット値であることを指定します。hのいずれも存在しない場合、数値はtcl_platform ( wordSize )によって示される、マジーン固有のWord幅の値として解釈されます。

変換指定子の最後の部分は、どの種類の変換を行うか決めるアルファベット文字です。現在サポートされているのは次の変換文字です。

d
整数を符号付き10進数文字列に変換します。
u
整数を符号無し10進数文字列に変換します。
i
整数を符号付き10進数文字列に変換します。 整数は 10進数、8進数(先頭に0がある)、16進数(先頭に0xがある)のどれでも可能です。
o
整数を符号無し8進数文字列に変換します。
xまたはX
x には"0123456789abcdef'" を、Xには"0123456789ABCDEF"を使って、整数を符号無し16進数文字列に変換します。
c
整数をそれが表現するUnicode文字に変換します。
s
変換なし。単に文字列を挿入します。
f
浮動小数点数を形式xx.yyyの符号付き10進数文字列に変換します。この形式のyの数は精度で決められます(ディフォルトは6)。精度が0の場合は小数点は出力されません。
   
eまたはE
動小数点数を形式x.yyye ± zzの科学の表記法に変換します。この形式のyの数は精度で決められます(ディフォルトは6)。精度が0の場合は小数点は出力されません。E形式が使われると、eの代りにEが出力されます。
gまたはG
指数が-4より少ない場合や、指数は精度より大きいか精度に等しい場合は、%eまたは%Eの浮動小数点数の変換をします。他の場合は%fの浮動小数点数の変換をします。末尾の0及び末尾の小数点は省略されます。
%
変換なし。単に%を挿入します。

数値変換では、変換される引数は整数か浮動小数点数の文字列でなければなりません。formatは引数をバイナリに変換した後に、変換指定子に相当する文字列に変換し直します。

ANSI SPRINTFとの差異

formatコマンドは次の差異を除いてANSI C sprintf関数と同じです。
[1] %pまたは%n 指定子は現在サポートされません。
[2] %c変換では引数は10進数の文字列でなければなりません。相当する文字の値に変換されます。
[3] 実数値に対してl変更子は無視されます。64ビットプラットホームでは常にlがあるかのように変換されます (つまりdouble型とlong型がそれぞれ実数値と整数値の内部表現に使われています)。 h変更子が指定されると整数値は変換の前にshortに切り捨てられます。全ての他の変換では、hl変更子の両方とも無視されます。

参照

sprintfstring

キーワード

conversion specifier, format, sprintf, string, substitution


Copyright © 1993 The Regents of the University of California. Copyright © 1994-1996 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.