書式指定
DBから取得した値を実際に帳票に出力する際には,桁数を揃えるなどの書式変換が必要になります。1項目毎に書式変換処理を記述するとなると,思った以上にコーディング量が増えるものです。特に,printf()風の書式変換しか提供されていない言語では,
- 3桁毎にカンマを挿入する。
- 値が負の時にマイナスマークの代わりに“▲”マークを付ける。
- 7桁郵便番号を“‐”で区切る。
- 日付を和暦で表記する。
といった帳票でよく使われる表現が書式指定文字列だけでは指定できず,コーディングが増える要因となっています。
Field Reportsでは,書式変換のためのコーディング量を極力減らすため(究極的にはDBから取得した生データをそのまま使えるように),強力な書式指定機能を実装しています。
数値の書式指定
マイクロソフトの .Net Framework 等で使われている「カスタム数値書式指定文字列」を参考に,以下のような記法を定義しました。
利用可能な書式指定文字
| 書式指定文字列 | 意味 |
|---|---|
| 0 |
ゼロプレースホルダ |
| # |
桁プレースホルダ |
| . | 小数点 |
| , | 桁区切り記号,値の位取り |
| % | パーセントプレースホルダ |
| \<文字> | エスケープ文字 |
| '<文字列>', "<文字列>" | リテラル文字列 |
| '<文字列>', "<文字列>" | セクション区切り記号(最大3セクション:正;負;ゼロ) |
| <その他の文字> | 結果の文字列にコピーされます。 |
※値の位取りの際には四捨五入を行います。
※指数表記(E0, E+0, e-00,...)には未対応です。
使用例
| 書式指定 | 値 | 変換後文字列 |
|---|---|---|
|
##### |
123 |
123 |
| 00000 | 123 | 00123 |
| (###)###-#### | 1234567890 | (123)456-7890 |
| #.## | 1.2 | 1.2 |
| 0.00 | 1.2 | 1.20 |
| 00.00 | 1.2 | 01.20 |
| #,# | 1234567890 | 1,234,567,890 |
| #,, | 1234567890 | 1235 |
| #,,, | 1234567890 | 1 |
| #,##0,, | 1234567890 | 1,235 |
| #0.##% | 0.086 | 8.6% |
| [##-##-##] | 123456 | [12-34-56] |
| ##;(##) | 1234 | 1234 |
| ##;(##) | -1234 | (1234) |
日付/時刻の書式指定
和暦の指定が可能な書式指定記法を定義しました。
利用可能な書式指定文字
| 書式指定文字列 | 意味 |
|---|---|
| YY |
2桁年(0パディングする) |
| YYYY | 4桁年(0パディングする) |
| M | 月(0パディングしない) |
| MM | 月(0パディングする) |
| B | 月略名(Jan., Feb.,..., Dec.) |
| BB | 月正式名(1月, 2月,..., 12月) |
| D | 日(0パディングしない) |
| DD | 日(0パディングする) |
| A | 曜日略名(日, 月,..., 土) |
| AA | 曜日正式名(日曜日, 月曜日,..., 土曜日) |
| G | 年号略名(M, T, S, H) |
| GG | 年号正式名(明治, 大正, 昭和, 平成) |
| E | 和暦(0パディングしない) |
| EE | 和暦(0パディングする) |
| h | 時(24時間表記,0パディングしない) |
| hh | 時(24時間表記,0パディングする) |
| H | 時(12時間表記,0パディングしない) |
| HH | 時(12時間表記,0パディングする) |
| m | 分(0パディングしない) |
| mm | 分(0パディングする) |
| s | 秒(0パディングしない) |
| ss | 秒(0パディングする) |
| t | 午前/午後略名(AM, PM) |
| tt | 午前/午後正式名(午前, 午後) |
| \<文字> | エスケープ文字 |
| '<文字列>', "<文字列>" | リテラル文字列 |
| <その他の文字> | 結果の文字列にコピーされる。 |
使用例
| 書式指定 | 日付/時刻 | 変換後文字列 |
|---|---|---|
|
YYYY年MM月DD日 |
2010-10-23 |
2010年10月23日 |
|
hh:mm:ss |
15:24:35 |
15:24:35 |
| GGEE年MM月DD日 | 1911-04-04 | 明治44年04月04日 |
| AA | 2040-01-01 | 日曜日 |
