.NET & Control > 複合書式指定機能と使い方
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
複合書式指定機能と使い方
書式指定が使用できる「クラス.メソッド」
- String.Format…書式設定された結果文字列を生成
- StringBuilder.AppendFormat…書式設定された文字列を追加
- Console.WriteLine… 書式設定された結果文字列をコンソールに出力
- TextWriter.WriteLine…書式設定された結果文字列をストリームまたはファイルに書き込む
複合書式フォーマットサンプル
"Text={0,-4} Value={1,-4} [{2}]"
複合書式指定
{ index[,alignment][:formatString]}
- 複合書式指定機能とは、文字列やオブジェクトを出力する際の書式指定の機能
- 複数のオブジェクトを1つの文字列に編集
- 埋め込み用桁数、右詰/左詰指定複合書式指定機能をサポートするメソッド
Index コンポーネント
("{1}{2}{0}{3}", obj1, obj2, obj3, obj4, obj5)
必須(パラメータ指定子とも呼ばれる)。パラメータリスト( 0 から始まる)の数値を指定。
同じパラメータ指定子を指定することも可能
1 つの数値オブジェクトを 16 進形式、指数形式、数値形式で書式設定する例
("{0:X}
{0:E} {0:N}", (double)obj)
参照されないオブジェクトは無視する。
オブジェクトのリスト範囲外の項目を指定するとランタイム例外を発生
Alignment コンポーネント
- 省略可能
- 書式設定フィールドの幅を指定する符号付き整数
- フィールドの幅値が書式設定する文字列の長さよりも小さい場合alignment値を無視
- 正の場合は右揃え
- 負の場合は左揃え
- 埋め込みは空白を使用
- alignment 指定する場合、コンマが必要
Format String コンポーネント
書式設定されるオブジェクトの種類に適した書式指定文字列
- 数値の場合「数値書式指定文字列」を指定
- DateTime オブジェクトの場合「日付と時刻の書式指定文字列」を指定
- 挙値の場合「列挙型書式指定文字列」を指定
- 省略の場合、数値、日付と時刻、列挙型の「汎用 ("G") 書式指定子」
- formatString を指定する場合はコロンが必要
数値書式指定文字列
- 標準の数値書式指定文字列
- カスタム数値書式指定文字列
文字列書式指定の使い方
様々なオブジェクトを文字列変換する際の書式指定の使い方をマスターしておきましょう。
少し混乱するので、ここで整理しておきます。
なお、CやC++などのprintf文字列書式と同様、変数値を書式付きで文字列に変換しますが、指定方法は全く違いますのでご注意を。
書式指定の種類
- 複合書式指定(複数の書式指定を含めた書式指定)
- 書式指定(型に対応ToStringメソッドの書式)
- 数値書式指定
- 標準 数値書式指定文字列
- カスタム 数値書式指定文字列
- 日付と時刻の書式指定
- 標準 DateTime 書式指定文字列
- カスタム DateTime 書式指定文字列
- 列挙型書式指定
- カスタマイズ
- 数値書式指定
数値書式指定
標準の数値書式指定文字列
各オブジェクトのToString(”[書式指定子][精度指定子]”)メソッドの書式パラメータ
例えば "D4" は 0001 ~ 9999
書式指定子 | 名前 | 説明 |
C or c | 通貨 | 数値を金額を表す文字列に変換 |
D or d | 10進数 | 整数型の数値を文字列に変換 |
E or e | 指数 | 数値を指数形式の文字列に変換 |
F or f | 固定小数点 | 数値を固定小数形式の文字列に変換 |
G or g | 一般 | |
N or n | 数値 | 数値を"-d,ddd,ddd.ddd…" 形式文字列に変換 |
P or p | パーセント | 数値をパーセント値を表す(数値に100を乗算)文字列に変換 |
R or r | ラウンドトリップ | |
X or x | 16 進数 | 数値を16 進数の文字列に変換 |
カスタム数値書式指定文字列
各オブジェクトのToString(”カスタム数値書式”)メソッドの書式パラメータ
書式指定子 | 名前 | 値 | 書式 | 文字列 |
0 |
ゼロ プレースホルダ |
123 | "00000" | 123 |
1.2 | "0.00" | 1.2 | ||
"00.00" | 1.2 | |||
.56 | "0.0" | 0.6 | ||
# |
桁 プレースホルダ |
1.2 | "#.##" | 1.2 |
123 | "#####" | 123 | ||
123456 | "[##-##-##] | [12-34-56] | ||
1234567890 | "#" | 1234567890 | ||
"(###)###-####" | (123)456-7890 | |||
. | 小数点 | 1.2 | "0.00" | 1.2 |
"00.00" | 1.2 | |||
0.086 | "#0.##%" | 8.60% | ||
86000 | "0.###E+0" | 8.6E+4 | ||
, |
桁区切り記号 および 数値の位取り |
1234567890 | "#,#" | 1,234,567,890 |
1234567890 | "#,," | 1235 | ||
"#,,," | 1 | |||
"#,##0,," | 1,235 | |||
% |
パーセント プレースホルダ |
0.086 | "#0.##%" | 8.60% |
E0 e0 E+0 e+0 E-0 e-0 |
指数表記 | 86000 | "0.###E+0" | 8.60E+04 |
"0.###E+000" | 8.60E+04 | |||
"0.###E-000" | 8.60E+04 | |||
\ | エスケープ文字 | Visual Basic未サポート(ControlCharsをエスケープ文字を使用) | ||
'ABC' | リテラル文字列 | |||
"ABC" | ||||
; |
セクション 区切り記号 |
1234 | "##;(##)" | 1234 |
-1234 | "##;(##)" | -1234 |
日付と時刻の書式指定
標準 DateTime 書式指定文字列
サンプル例は全てDateTime(2010,1,1,2,3,4)を使用
書式指定子 | 名前 | 書式 | 変換後の文字列 |
d | 短い形式の日付 | "d" | 2010/01/01 |
D | 長い形式の日付 | "D" | 2010年1月1日 |
f | 完全な日付と時刻(短い形式の時刻) | "f" | 2010年1月1日 2:03 |
F | 完全な日付と時刻(長い形式の時刻) | "F" | 2010年1月1日 2:03:04 |
g | 一般の日付と時刻(短い形式の時刻) | "g" | 2010/01/01 2:03 |
G | 一般の日付と時刻 (長い形式の時刻) | "G" | 2010/01/01 2:03:04 |
M、m | 月日 | "M" | 1月1日 |
O、o | ラウンド トリップ日付と時刻 | "O" | 2010-01-01T02:03:04.0000000 |
R、r | RFC1123 パターン | "R" | Fri, 01 Jan 2010 02:03:04 GMT |
s | 並べ替え可能な日付と時刻(ISO 8601 準拠) | "s" | 2010-01-01T02:03:04 |
t | 短い形式の時刻 | "t" | 2:03 |
T | 長い形式の時刻 | "T" | 2:03:04 |
u | 並べ替え可能な日付と時刻(世界時刻) | "u" | 2010-01-01 02:03:04Z |
U | 完全な日付と時刻(世界時刻) | "U" | 2009年12月31日 17:03:04 |
Y、y | 年月 | "Y" | 2010年1月 |
その他の1文字 | 未定義の指定子 | ランタイム FormatException をスロー |
カスタム DateTime 書式指定文字列
サンプル例は全てDateTime(2010,1,1,2,3,4)を使用
書式指定子 | 名前 | 書式 | 変換後の文字列 |
d | 日(1 ~ 31) | "d, M" | 1, 1 |
dd | 日(01 ~ 31) | "dd, MM" | 01, 01 |
ddd | 曜日の省略名 | "ddd d MMM" | 金 1 1 |
dddd | 曜日の完全な名前 | "dddd dd MMMM" | 金曜日 01 1月 |
f | 秒の端数最上位桁 (1/10) | "f" | 2:03:04.0 |
ff | 秒の端数最上位2桁 (1/100) | "ff" | 2:03:04.00 |
fff | 秒の端数最上位3桁 (1/1000) | "fff" | 2:03:04.000 |
ffff | 秒の端数最上位4桁 (1/10000) | "ffff" | 2:03:04.0000 |
fffff | 秒の端数最上位5桁 (1/100000) | "fffff" | 2:03:04.00000 |
ffffff | 秒の端数最上位6桁 (1/1000000) | "ffffff" | 2:03:04.000000 |
fffffff | 秒の端数最上位7桁 (1/10000000) | "fffffff" | 2:03:04.0000000 |
g, gg | 年代または紀元を表す (A.D. など) | "MM/dd/yyyy g" | 01/01/2010 西暦 |
h | 時間(1 ~ 12) | "h:m:s.F t" | 2:3:4 午 |
H | 時間(0 ~ 23) | "H:mm:ss" | 2:03:04 |
HH, HH | 時間(00 ~ 23) | "HH:mm:ss" | 02:03:04 |
K | 日付と時刻の値のタイム ゾーン情報 | ||
m | 分(0 ~ 59) | "h:m:s.F t" | 2:3:4 午 |
M | 月(1 ~ 12) | "(M) MMM, MMMM" | (1) 1, 1月 |
mm | mm 分(00 ~ 59) | "hh:mm:ss.FF tt" | 02:03:04 午前 |
MM | 月(01 ~ 12) | "dd, MM | 01, 01 |
MMM | 月の省略名 | "ddd d MMM" | 金 1 1 |
MMMM | 月の完全な名前 | "dddd dd MMMM" | 金曜日 01 1月 |
s | 秒(0 ~ 59) | "h:m:s.F t" | 2:3:4 午 |
ss, ss | 秒(00 ~ 59) | "hh:mm:ss.FF tt" | 02:03:04 午前 |
t | AM/PM指定子の最初の文字 | "h:m:s.F t" | 2:3:4 午 |
tt, tt | AM/PM 指定子 | "hh:mm:ss.FF tt" | 02:03:04 午前 |
y | 年(1 桁または 2 桁の数値) | "%y" | 10 |
yy | 年(2桁) | "yy" | 10 |
yyy | 年(3 桁以上) | "yyy" | 2010 |
yyyy | 年(4 桁) | "yyyy" | 2010 |
yyyyy | 年(5 桁) | "yyyyy" | 02010 |
z | 符号付きオフセット (時間単位) | "{0:%z}" | +9 |
zz | "{0:zz}" | +09 | |
zzz, zzz | 符号付きオフセット (時間、分単位) | "{0:zzz}" | +09:00 |
: | 時間の区切り記号 時、分、秒の区別 | ||
/ | 日付の区切り記号 年、月、日の区別 | ||
" | 引用文字列 (引用符) | ||
' | 引用文字列 (アポストロフィ) | ||
% | c d、f、F、h、m、s、t、y、z、H、M の各カスタム書式指定子を単独で使用する場合、"%d"、"%f"、"%F"、"%h"、"%m"、"%s"、"%t"、"%y"、"%z"、"%H"、"%M" と指定する | ||
\c | エスケープ文字。文字"c" の前にエスケープ文字 (\) を付けると、その文字がリテラルとして表示する | ||
その他の文字 | そのまま文字列にコピーする(書式設定には影響しない) |
列挙型書式指定
[FlagsAttribute] enum Colors { Black = 0, Red = 1, Green = 2, Blue = 4, White = 7 }; Colors color = Colors.White; color.ToString("g"); // White color.ToString("G"); // White color.ToString("x"); // 00000007 color.ToString("X"); // 00000007 color.ToString("d"); // 7 color.ToString("D"); // 7 color.ToString("f"); // White color.ToString("F"); // White
複合書式指定
- 複合書式指定機能とは、文字列やオブジェクトを出力する際の書式指定の機能
- 複数のオブジェクトを1つの文字列に編集
- 埋め込み用桁数、右詰/左詰指定
複合書式指定をサポートするメソッド
String.Format | 書式設定された結果文字列を生成 |
Append.Format | 書式設定された文字列をStringBuilderオブジェクトに追加 |
Console.WriteLine | 書式設定された結果文字列をコンソールに出力 |
TextWriter.WriteLine | 書式設定された結果文字列をストリームまたはファイルに書き込む |
式指定項目の構文
{ index[,alignment][:formatString] }
"{0,-4:}{1}{2}", [オブジェクトの並び]
"{0,-4}{1,-4}{2,-4}・・・{8,-4}{9,-4}{10,-4}", [オブジェクトの並び]
Index コンポーネント
("{1}{2}{0}{3}", obj1, obj2, obj3, obj4, obj5)
必須(パラメータ指定子とも呼ばれる)。パラメータリスト( 0 から始まる)の数値を指定。
同じパラメータ指定子を指定することも可能
1 つの数値オブジェクトを 16 進形式、指数形式、数値形式で書式設定する場合
("{0:X} {0:E}
{0:N}", (double)obj)
参照されないオブジェクトは無視する。
オブジェクトのリスト範囲外の項目を指定するとランタイム例外を発生
Alignment コンポーネント
- 省略可能
- 書式設定フィールドの幅を指定する符号付き整数
- フィールドの幅値が書式設定する文字列の長さよりも小さい場合alignment値を無視
- 正の場合は右揃え
- 負の場合は左揃え
- 埋め込みは空白を使用
- alignment 指定する場合、コンマが必要
Format String コンポーネント
書式設定されるオブジェクトの種類に適した書式指定文字列
- 数値の場合「数値書式指定文字列」を指定
- DateTime オブジェクトの場合「日付と時刻の書式指定文字列」を指定
- 挙値の場合「列挙型書式指定文字列」を指定
- 省略の場合、数値、日付と時刻、列挙型の「汎用 ("G") 書式指定子」
- formatString を指定する場合はコロンが必要