フォーマット指定子のフラグを指定する

フォーマット指定子のオプションの 1 つであるフラグを指定する方法です。フラグを使用すると対象の値が正の値だったときに「+」を表示するようにしたり、数値を 16 進数で表現するときに先頭に「0X」を付けることができます。ここでは Perl でフォーマット指定子のオプションであるフラグの使い方について解説します。

(Last modified: )

フラグの一覧

フォーマット指定子のオプションの 1 つであるフラグを指定する方法です。フラグを指定する場合はフォーマット指定子の次の位置に記述します。

%[フラグ][最小幅][.精度/最大幅]型指定子

フラグは次のものが用意されています。

space   数値が正だった場合に空白を先頭に付けます
+       数値が正だった場合に「+」を先頭に付けます
-       左詰めに設定(デフォルトは右詰め)
0       右詰めの場合に0詰めを行う
#       8進数の場合に「0」、16進数の場合に「0x」又は「0X」、2進数の場合
        に「0b」を先頭に付けます。(すべて数値が0以外の場合のみ)。

それでは 1 つ 1 つ確認していきます。

フラグにスペースを指定

フラグにスペースを記述した場合、正の数値の前に 1 文字空白を付けます。使い方は次の通りです。

printf("[%d]\n", 30);
printf("[% d]\n", 30);
printf("[% d]\n", -30);

上記の場合、結果は次のように表示されます。

[30]
[ 30]
[-30]

フラグに「+」を指定

フラグに「+」を記述した場合、正の数値の前に + を付けます。使い方は次の通りです。

printf("[%d]\n", 30);
printf("[%+d]\n", 30);
printf("[%+d]\n", -30);

上記の場合、結果は次のように表示されます。

[30]
[+30]
[-30]

フラグに「-」を指定

フラグに - を記述した場合、左詰めで表示されます。デフォルトは右詰めです。使い方は次の通りです。

printf("[%4d]\n", 30);
printf("[%-4d]\n", 30);

右詰めにした場合は最小幅が指定されていなければ必要な桁数のみ表示されるため左詰めとの違いが分かりません。その為、上記では最小幅を 4 に設定しています。(最小幅については「最小幅を指定する」を参照されてください)。

上記の場合、結果は次のように表示されます。

[  30]
[30  ]

フラグに「0」を指定

フラグに 0 を記述した場合、 0 詰めで表示されます(右詰めの場合のみ)。使い方は次の通りです。

printf("[%4d]\n", 30);
printf("[%04d]\n", 30);

最小幅が指定されていなければ必要な桁数のみ表示されるため 0 詰めは行われません。その為、上記では最小幅を 4 に設定しています。

上記の場合、結果は次のように表示されます。

[  30]
[0030]

フラグに「#」を指定

フラグに # を記述した場合、 8 進数の場合は "0"、 16 進数の場合は "0x" または "0X"、 2 進数の場合は "0b" を先頭に付けます。ただし数値が 0 の場合は付きません。使い方は次の通りです。

printf("[%#o]\n", 30);
printf("[%#x]\n", 30);
printf("[%#b]\n", 30);

上記の場合、結果は次のように表示されます。

[036]
[0x1e]
[0b11110]
サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

printf("[%d]\n", 30);
printf("[% d]\n", 30);
printf("[% d]\n", -30);

printf("[%d]\n", 30);
printf("[%+d]\n", 30);
printf("[%+d]\n", -30);

printf("[%4d]\n", 30);
printf("[%-4d]\n", 30);

printf("[%4d]\n", 30);
printf("[%04d]\n", 30);

printf("[%#o]\n", 30);
printf("[%#x]\n", 30);
printf("[%#b]\n", 30);

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

フォーマット指定子のフラグを指定する(1)

数値に対して色々なフラグを設定しフォーマットされた文字列を取得しました。

-- --

Perl でフォーマット指定子のオプションであるフラグの使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。