形式
sprintf( $arg, ... , $fmt, $result)
引数
- $arg: フォーマット文字列への引数(可変)
- $fmt: フォーマット文字列
- $result: 結果
完了時の動作
- 正常時:次の述語を実行に移ります。
- 異常時(フォーマットエラー):バックトラックします。
バックトラック時の動作
- 常にバックトラックします。前の述語にバックトラックします。
説明
$fmtをフォーマット文字列とし、$argを引数としてC言語のsprintf関数を呼び出します。結果を$resultに格納します。
以下の書式指定文字をサポートしています(xとoはVer0.7からのサポートです)。
- d: 整数(10進数で出力)
- x: 整数(16進数で出力)
- o: 整数( 8進数で出力)
- f: 実数
- s: 文字
- ,: 3桁区切り整数(独自の拡張)
書式指定文字は、%sのように指定します。またC言語の書式指定文字列と同様に%40sや%5.2fなどのようにサイズも指定できます。
※Ver 0.82からはサイズ指定に * が使用できます。%*.*sのように指定できます。
コード例 (lib/sprintf.p)
,sprintf("文字列", 10, 3.14159265, 2560000, "%s::%03d / %5.2f / %,").prt;
※%s::%03dで、s::とコロンが2回出てきますが、Ver0.82以降のADPのsprintfの独自仕様で2つ必要になります。
実行例
D:\sample\lib>adp sprintf.p
文字列:010 / 3.14 / 2,560,000
※引数の順番がVer 0.82から変わりました。0.81以前では、以下のとおり$fmtが最初になります。
sprintf( $fmt, $arg, ... , $result)
フォーマット文字列内での連想配列のキーアクセス
ADP 0.82以降では、sprintfに連想配列を渡した場合、フォーマット文字列に連想配列でのキーアクセスができるようになります。
書式指定文字の後に、例えば %s:key1; のように、
:
キー名;
とコロンで続けてキー名を指定します(セミコロン;でキー名を終了させます)。
コード例 (lib/sprintf2.p)
_global({ :key1=>10, :key2=>'test', :key3=>10.5}, 'test');
global('test').sprintf("%d:key1; %s:key2; %f:key3;").prtn;
実行例
D:\sample\lib>adp sprintf2.p
10 test 10.500000