「PHPでテキスト中の和暦・西暦年号を統一する」では、 正規表現を使って、テキスト中の年号を、和暦、西暦、西暦・和暦混合のいずれかに統一して変換するPHPプログラムを作った。今回は、このプログラムをWindowsアプリに移植する。
サンプル・プログラム
サンプル・プログラムの解説:西暦を和暦へ変換
0191: /**
0192: * 年号変換(和暦)
0193: * @param string $sourオリジナル・テキスト
0194: * @return string変換後テキスト
0195: */
0196: function wareki($sour) {
0197: $pat = '([0-9〇一二三四五六七八九十百千万]+)年';
0198: $items = array();
0199:
0200: mb_ereg_search_init($sour, $pat);
0201: while (($arr = mb_ereg_search_regs()) != FALSE) {
0202: if (isset($arr[1]) && ($arr[1] != '')) {
0203: $items[$arr[0]] = seireki2wareki($arr);
0204: }
0205: }
0206: foreach ($items as $key=>$val) {
0207: $sour = mb_ereg_replace($key, $val, $sour);
0208: }
0209:
0210: return $sour;
0211: }
「PHPでテキストの読みやすさを調べる(Windowsアプリ版)」でも触れたが、bamcompile でEXEプログラムをつくる場合、preg系関数が正常に働かない。
そこで、ユーザー関数 wareki の中身を mb_ereg 系関数で代替することにしたが、あいにく mb_ereg_replace_callback 関数がPHP 5以降でないと利用できない。
仕方が無いので、 mb_ereg_search_init , mb_ereg_search_regs , mb_ereg_replace の3つの関数を使って代替する。
手順としては、テキストの最初から mb_ereg_search_regs 関数でマッチする文字列を洗い出し、逐次、配列 $items に入れていく。次に、配列 $items にマッチする文字列を mb_ereg_replace 関数を使って置換してゆく。
なお、下請けのユーザー関数 seireki2wareki,_seireki2wareki は、そのまま使える。
ユーザー関数 seireki,mixture についても、同様に mb_ereg 系関数で代替してゆく。
そこで、ユーザー関数 wareki の中身を mb_ereg 系関数で代替することにしたが、あいにく mb_ereg_replace_callback 関数がPHP 5以降でないと利用できない。
仕方が無いので、 mb_ereg_search_init , mb_ereg_search_regs , mb_ereg_replace の3つの関数を使って代替する。
手順としては、テキストの最初から mb_ereg_search_regs 関数でマッチする文字列を洗い出し、逐次、配列 $items に入れていく。次に、配列 $items にマッチする文字列を mb_ereg_replace 関数を使って置換してゆく。
なお、下請けのユーザー関数 seireki2wareki,_seireki2wareki は、そのまま使える。
ユーザー関数 seireki,mixture についても、同様に mb_ereg 系関数で代替してゆく。
コンパイル
コマンドラインから "bamcompile nengowin.bcp" を実行する。コンパイルが完了すると、"nengowin.exe" が生成される。"nengowin.exe" は、DLL不要で、単独で動作するEXEプログラムである。
参考サイト
- PHPでテキスト中の和暦・西暦年号を統一する:ぱふぅ家のホームページ
(この項おわり)