Top / Alan言語仕様 / putf()

void: putf(str:fmt, ...)
void: putf(Fmt:fmt, ...)

説明
書式 fmt に沿って任意の型の変数を任意個数 stdout に印字します。 書式の文法は一言で言うと 「C の printf(3) と Perl のフォーマット(→ man perlform)を足して2で割り 型情報(%d, %s, %f など)を省略させた」ような仕様です。 詳細は以下を参照下さい。

技術情報(背景など)はこちらを参照してください。

戻り値
-
例
書式の文法を先に説明するより、例を提示する方が最初は理解しやすいでしょう。
  1. putf("% %\n", 3, 4)     # 整数を2つ空白を開けて印字
    
    整数型を指定する d がない点に注目。印字する場所を % 記号で 示しているだけです。
  2. putf("% %\n", real.E, real.PI)     # 自然定数 e と円周率πを2つ空白を開けて印字
    
    実数型も f は不要で、整数と同じく % で印字しています。 指数表現(#.####e+##)を指定したい場合は明示的に指定する必要があります。 書式の項を参照下さい。
  3. putf("%,%,%\n", 3, real.PI, "Hello")   # カンマ区切り(csv)(ただし不完全)
    
    整数、実数、文字列の混在も全て % です。カンマで区切れば一応 csv フォーマット(ただしエスケープは効かないので簡単な印字の場合 だけ使える方法です)。
  4. putf("%10.3\n",      real.PI) # 実数を幅10桁, 小数3桁まで印字
    putf("%>>>>>.>>>\n", real.PI) # 同じことを perl format ライクに
    
    printf と同様に印字桁数を指定できます。 perl format と似た書式もサポートしています。
  5. putf("%'10 %'10\n",             1234, 5678)  # 3桁ごとカンマも正式サポート
    putf("%'>>>>>>>> %'>>>>>>>>\n", 1234, 5678)  # perl formatライクでも指定できます
    
  6. # ちょっとレポートらしい例を。
    # ヘッダ、データ x 2回、フッタの順に印字してます。
    
    str: header = "|Player| Score |\n"
    str: line   = "+------+-------+\n"
    Fmt: fmt    = "|%<<<<<|%>>>>>>|\n"
    
    put(line, header, line)
    putf(fmt, "Wells", 125)
    putf(fmt, "Kuma", 12345)
    put(line)
    
    fmtを複数回使用しているので文字列でなく Fmt 型を使用しています。 書式の項を参照下さい。
書式 fmt
putf() 関数の第一引数 fmt で印字書式を指定します。fmt の型には2種類あり、 一つは str型、もう一つは str型書式をコンパイルした Fmt 型です。 1つの書式を何回も使用する場合はあらかじめコンパイルして Fmt 型変数に いれておくのが効率的でしょう。

書式の文法
書式の文法は下記の2行で表せる簡単なものです:

書式         ::= (フォーマット|文字列|%%)の繰り返し
フォーマット ::= % フラグ 幅 基数等
ここで、フラグには下記を任意個数(0個から)指定できます:
(省略時) 右寄せ
+ 符合(+/-)を明示的に印字
0 指定された幅をゼロ(0)で埋める
' 3桁ごとのカンマ
- 左寄せ
c センタリング(未対応)

幅には下記を指定できます:
(省略時) 引数の値を表示できる最大幅で印字します。
[1-9]{[0-9]} ゼロ以外で始まる10進数。 印字するデータの幅(桁数)を指定します。
.[1-9]{[0-9]} ドットに続いてゼロ以外で始まる10進数。 実数の場合、精度(小数以下の桁数)を指定します。
[1-9]{[0-9]}.[1-9]{[0-9]} 全体の桁数と小数以下の精度の両方を指定します。
{>}+ 桁数を数字ではなく > の数で表現します。同時に、> は右寄せ を意味しています(Perl の format と同様)。
{>}+.{>}+ 桁数と精度を > と . で指定します。 %5.1 と同じ > 表現は %>>.> となります (全体の幅 5文字を %, >, >, ., > の5文字で表現。 小数以下を .> で表現)。
{|}+ (未対応)>* と同様ですが、センタリングします。
{|}+.{|}+ (未対応) >*.>* と同様ですが、センタリングします。
{<}+ >* と同様ですが、左寄せします。
{<}+.{<}+ >*.>* と同様ですが、左寄せします。
(NOTE: 上の文法の この色の部分は、 メタ表現を参照下さい。

「基数等」には下記を指定できます:
(省略時) それぞれの型のデフォルト値が使用されます。
整数 --10進
実数 --%f相当
x 16進(0-9a-z)(整数に対してのみ有効)
X 16進(0-9A-Z)(整数に対してのみ有効)
b 2進(整数に対してのみ有効)
o 8進(整数に対してのみ有効)
e 指数表現 #.#####e+## (実数に対してのみ有効)
E 指数表現 #.#####E+## (実数に対してのみ有効)

SEE ALSO
put()
例外
VE_FMT_SYNTAX -- putf() フォーマットの文法エラー。
サポート状況
今のところ('06/10/24 v0.19)、 書式(右寄せ、3桁ごとのカンマ、など)の組合わせは全てをサポート できていません。現在対応できてない書式の組合わせは 下記の通りです:
例 説明 理由
%->>> 左寄せオプション(-) + 右寄せpadding 左寄せ '-' と右寄せ >>> で矛盾しているため
%'08 3桁カンマ(') + ゼロpadding(0) 未対応ですm(__)m
%|||| センタリング 未対応ですm(__)m




Top / Alan言語仕様 / putf()





Alan ver0.31