※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。

■ フォーマット(書式整形)関数(sprintf)

さて、「時間関数について(localtime、timeなど)」のところで「フォーマット(書式整形)関数(sprintf)」のことについて少し触れました。
このページではもっと詳しく解説してみましょう。

「フォーマット(書式整形)関数(sprintf)」は、変数の内容を指定した書式に変換してくれます。
そのために、「書式指定文字列」というものを使います。
「書式指定文字列」の書式は「%fm.nx」というパターンで記述され、その指定には様々な種類がありますが、一般的によく使用するものに絞って説明いたします。

フラグ(f)
記述例 意  味
- 左詰(ディフォルトは右詰)
+ 正の数値に「+」符号を付ける
空白 正の数値に「空白」を付ける
0 数値の前を「0」埋めする
# 8進数の時「0」を、16進数の時「0x」を、10進数の時小数点を付ける
m(最小幅) 指定した桁数にそろえる
n(最大幅、精度) 文字列の最大桁数、小数点以下の桁数、指数表現の有効桁数

型指定子フラグ(x)
記述例 意  味
% パーセント文字
c 文字
s 文字列
d 10進整数
o 8進整数
u 符号なし10進整数
x 16進整数
X 16進整数(英字に大文字を使用する)
e 浮動小数点(指数形式)
E 浮動小数点(指数形式)(英字に大文字を使用する)
f 浮動小数点(固定小数点形式)
g 浮動小数点(eとfで文字桁数が短い方を使用する)
G 浮動小数点(Eとfで文字桁数が短い方を使用する)

上記の解説では全然意味が解からないと思いますので、サンプルを記述しておきます。
下記のサンプルでの注意点は2箇所です。
1.1行目の「#!/usr/bin/perl」はサーバーによって違いますので確認してください。
2.表示文字列の最後にある「<br>\n」はそれぞれのHTMLの改行とテキストファイルの改行です。

【記述サンプル】
#!/usr/bin/perl print << "END_DOC"; Content-type:text/html\n\n <HTML> <HEAD> <title>フォーマット(書式整形)関数のテスト</title> </HEAD> <BODY> END_DOC $a = "abcdefg"; print "◆\"$a\"<br>\n"; print "%c = ".sprintf("%c<br>\n", $a); print "%s = ".sprintf("%s<br>\n", $a); print "%10s = ".sprintf("%10s<br>\n", $a); print "%-10s = ".sprintf("%-10s<br><br>\n", $a); $a = 12345.6789; print "◆$a<br>\n"; print "%c = ".sprintf("%c<br>\n", $a); print "%s = ".sprintf("%s<br>\n", $a); print "%d = ".sprintf("%d<br>\n", $a); print "%f = ".sprintf("%f<br>\n", $a); print "%o = ".sprintf("%o<br>\n", $a); print "%x = ".sprintf("%x<br>\n", $a); print "%X = ".sprintf("%X<br>\n", $a); print "%e = ".sprintf("%e<br>\n", $a); print "%E = ".sprintf("%E<br>\n", $a); print "%g = ".sprintf("%g<br>\n", $a); print "%G = ".sprintf("%G<br><br>\n", $a); print "%2d = ".sprintf("%2d<br>\n", $a); print "%8d = ".sprintf("%8d<br>\n", $a); print "%08d = ".sprintf("%08d<br><br>\n", $a); print "%2.2f = ".sprintf("%2.2f<br>\n", $a); print "%8.8f = ".sprintf("%8.8f<br>\n", $a); print "%08f = ".sprintf("%08f<br>\n", $a); print "%08.f = ".sprintf("%08.f<br>\n", $a); print "%08.2f = ".sprintf("%08.2f<br>\n", $a); print "%8.3f% = ".sprintf("%8.3f%<br><br>\n", $a); print "%#d = ".sprintf("%#d<br>\n", $a); print "%#f = ".sprintf("%#f<br>\n", $a); print "%#o = ".sprintf("%#o<br>\n", $a); print "%#x = ".sprintf("%#x<br>\n", $a); print "%#X = ".sprintf("%#X<br><br><br>\n", $a); $a = -12345.6789; print "◆$a<br>\n"; print "%s = ".sprintf("%s<br>\n", $a); print "%d = ".sprintf("%d<br>\n", $a); print "%f = ".sprintf("%f<br>\n", $a); print "%o = ".sprintf("%o<br>\n", $a); print "%x = ".sprintf("%x<br>\n", $a); print "%X = ".sprintf("%X<br>\n", $a); print "%e = ".sprintf("%e<br>\n", $a); print "%E = ".sprintf("%E<br>\n", $a); print "%g = ".sprintf("%g<br>\n", $a); print "%G = ".sprintf("%G<br><br>\n", $a); print "%2d = ".sprintf("%2d<br>\n", $a); print "%8d = ".sprintf("%8d<br>\n", $a); print "%08d = ".sprintf("%08d<br><br>\n", $a); print "%2.2f = ".sprintf("%2.2f<br>\n", $a); print "%8.8f = ".sprintf("%8.8f<br>\n", $a); print "%08f = ".sprintf("%08f<br>\n", $a); print "%08.f = ".sprintf("%08.f<br>\n", $a); print "%08.2f = ".sprintf("%08.2f<br>\n", $a); print "%8.3f% = ".sprintf("%8.3f%<br><br>\n", $a); print "%#d = ".sprintf("%#d<br>\n", $a); print "%#f = ".sprintf("%#f<br>\n", $a); print "%#o = ".sprintf("%#o<br>\n", $a); print "%#x = ".sprintf("%#x<br>\n", $a); print "%#X = ".sprintf("%#X<br><br>\n", $a); print << "END_DOC"; </BODY> </HTML> END_DOC
◆実行結果について

上記のサンプルを「sprintf.cgi」という名前で保存して実行してみてください。

実行結果はこちらをクリックしてください。
なお、実行結果については、各々のサーバーの環境、ユーザーの環境にによって内容は変わってきます。
表示結果はHTML形式となっていますので、連続した半角空白は表面上表示できません。
一部、ソースで確認する必要があります。


page update:2010/01/23 20:32

Copyright (c) 2000-2009, all Rights Reserved & Produced by atom