カスタム数値書式指定文字列による文字列整形プログラム
Microsoft Excelでは「ユーザー定義」,.Net Frameworkでは「カスタム数値書式指定文字列」と呼ばれる独特の記法がある。このカスタム数値書式指定文字列にしたがって,数値を文字列に変換するプログラムをOCamlで作成した。
カスタム数値書式指定文字列自体の仕様についてはMSDNなどで公開されているが,細かな仕様についての記述がなく苦労した。MSDNの「出力例」で仕様を類推したり,Excelの「セルの書式設定/ユーザ定義」で動作を確認しつつ現物合わせで調整した箇所もある。
ソースは公開するので,自由にご利用いただきたい(ダウンロード先:技術情報 - 合同会社フィールドワークス / Field Works, LLC)。動作確認は,Mac OS Xで行った。文字コードはUTF-8を想定しているので,Windows等の環境では文字化けが発生するかもしれない。
私が気づいていない未知の仕様に気づいたり,問題を見つけた場合はご連絡願います。
ソースヘッダの一部を以下に示す。
書式指定付き文字列変換関数 MS Office/.Net Framework カスタム数値書式指定文字列形式の書式指定により, 数値を文字列に変換します。 【利用可能な書式指定文字】 0 ゼロプレースホルダ # 桁プレースホルダ . 小数点 , 桁区切り記号,値の位取り % パーセントプレースホルダ \<文字> エスケープ文字 '<文字列>', "<文字列>" リテラル文字列 ; セクション区切り記号(最大3セクション:正;負;ゼロ) その他の文字 結果の文字列にコピーされる。 ※指数表記(E0, E+0, e-00,...)には未対応です。 【利用可能なエスケープ文字】 \b バックスペース(BS) \n 行送り(LF) \r 復帰(CR) \t 水平タブ(TAB) \u<HHHH> 16進数値HHHHを持つUNICODE文字 \<文字> 文字自身 【使用例】 format_int 123 "#####" -> "123" format_int 123 "00000" -> "00123" format_int 1234567890 "(###)###-####" -> "(123)456-7890" format_float 1.2 "#.##" -> "1.2" format_float 1.2 "0.00" -> "1.20" format_float 1.2 "00.00" -> "01.20" format_int 1234567890 "#,#" -> "1,234,567,890" format_int 1234567890 "#,," -> "1235" format_int 1234567890 "#,,," -> "1" format_int 1234567890 "#,##0,," -> "1,235" format_float 0.086 "#0.##%" -> "8.6%" format_int 123456 "[##-##-##]" -> "[12-34-56]" format_int 1234 "##;(##)" -> "1234" format_int (-1234) "##;(##)" -> "(1234)" v}