bamcompileを使ってPHPからexeファイルを作成

1月 27th, 2008 admin Posted in PHP |

顧客が作ったCSVを使ったアプリを作っているんですが

  • 全角英数字が混じる
  • (株)やローマ数字などいわゆる機種依存文字が混じる

ので、全角英数字を半角にし、機種依存文字を適当に変換するスクリプトを書いた。
ただそんなことをサーバサイドでやるのもアホらしいのでPHPをexeにしてくれるbamcompileってのを使った。

作ってみてPHPってバカにされているけど日本語処理に関しては他の言語よりかなり便利に使えることに気が付いた。
文字の扱いって他の言語じゃこんなに簡単じゃないと思う。(だから駄目だとか言われるんだろうけど)

bamcompileについて

bamcompile 本家
http://www.bambalam.se/bamcompile/
【PHP TIPS】 38. bamcompileでスタンドアロンEXEアプリを作ろう:ITpro

http://itpro.nikkeibp.co.jp/article/COLUMN/20070507/270089/

exeの作り方

僕はまずconvert.phpってのをつくり

C:\bamcompile1.21>bamcompile.exe -e:C:\xampp\php\extensions\php_mbstring.dll ./convert.php

ってやった。-eのオプションは任意のエクステンションを埋め込む用。
これだけでconvert.exeってのができて実行できるんだ。すげー!

今回の成果物の使い方

C:\>convert.exe old.csv

って感じで第一引数にファイル名を指定してやる。毎回コマンドプロンプトを立ち上げるのは面倒なのでショートカットを作成しておく予定。

ダウンロード

なんか嬉しいのでダウンロードできるようにしておく。
convert.zip(1.44MB)
(ウイルスチェックはしてありますし、悪意もありませんが、これをダウンロード及び実行したことによっていかなることが起こっても責任は一切負いません。)

PHPのソース

www.shibata.tv - Essay - 機種依存文字変換スクリプト
http://www.shibata.tv/essay/essay_515.html

↑ここのコードをお借りしました。

<?php
mb_language('ja');
mb_internal_encoding('SJIS');

if(!isset($argv[1]) || !file_exists($argv[1])){
	echo "第一引数にファイルを指定してください。";
	exit;
}

$filename = $argv[1];

echo "converting...\n";

$file = file($filename);
$newdata = '';

foreach($file as $v){
$v = replaceText($v);
$v = mb_convert_kana($v,'KVa');
$newdata .= $v;
}

$fp = fopen("new_".$filename,'w');
fwrite($fp,$newdata);

echo "converted ".count($file)."lines\n";

function replaceText($str){
$ret = $str;
$arr = array(
// 丸付き文字
'①' => '(1)',
'②' => '(2)',
'③' => '(3)',
'④' => '(4)',
'⑤' => '(5)',
'⑥' => '(6)',
'⑦' => '(7)',
'⑧' => '(8)',
'⑨' => '(9)',
'⑩' => '(10)',
'⑪' => '(11)',
'⑫' => '(12)',
'⑬' => '(13)',
'⑭' => '(14)',
'⑮' => '(15)',
'⑯' => '(16)',
'⑰' => '(17)',
'⑱' => '(18)',
'⑲' => '(19)',
'⑳' => '(20)',
'㊤' => '(上)',
'㊥' => '(中)',
'㊦' => '(下)',
'㊧' => '(左)',
'㊨' => '(右)',

// ローマ数字
'Ⅰ' => 'I',
'Ⅱ' => 'II',
'Ⅲ' => 'III',
'Ⅳ' => 'IV',
'Ⅴ' => 'V',
'Ⅵ' => 'VI',
'Ⅶ' => 'VII',
'Ⅷ' => 'VIII',
"Ⅸ\" => 'IX',
'Ⅹ' => 'X',
'ⅰ' => 'i',
'ⅱ' => 'ii',
'ⅲ' => 'iii',
'ⅳ' => 'iv',
'ⅴ' => 'v',
'ⅵ' => 'vi',
'ⅶ' => 'vii',
'ⅷ' => 'viii',
'ⅸ' => 'ix',
'ⅹ' => 'x',

// 単位文字
'㍉' => 'ミリ',
'㌔' => 'キロ',
'㌢' => 'センチ',
'㍍' => 'メートル',
'㌘' => 'グラム',
'㌧' => 'トン',
'㌃' => 'アール',
'㌶' => 'ヘクタール',
'㍑' => 'リットル',
'㍗' => 'ワット',
'㌍' => 'カロリー',
'㌦' => 'ドル',
'㌣' => 'セント',
'㌫' => 'パーセント',
'㍊' => 'ミリバール',
'㌻' => 'ページ',
'㎜' => 'mm',
'㎝' => 'cm',
'㎞' => 'km',
'㎎' => 'mg',
'㎏' => 'kg',
'㏄' => 'cc',
'㎡' => 'm<sup>2</sup>',

// その他
'№' => 'No.',
'㏍' => 'K.K.',
'℡' => 'TEL.',
'㈱' => '(株)',
'㈲' => '(有)',
'㈹' => '(代)',
'㍾' => '明治',
'㍽' => '大正',
'㍼' => '昭和',
'㍻' => '平成',
);
return str_replace( array_keys( $arr), array_values( $arr), $str);
}
?>

Leave a Reply