読者です 読者をやめる 読者になる 読者になる

漢数字をアラビア数字に変換とか(突貫工事)

漢数字をアラビア数字に

一か八かとか、万が一。百子(人命)とか機械的に変換してしまわないように、一桁の数字は排除して漢数字をアラビア数字に変換するプログラム。突貫工事。
(JSで実装したんだけど欲しいのはPerlのプログラム...。)

ソース

"フランス料理のコース二千五百円(サービス料金加えて三千円)三名様より".toArabiaSuuji();
// "フランス料理のコース2500円(サービス料金加えて3000円)三名様より"

(function()
{
    var base = {"零":0, "一":1,"二":2,"三":3,"四":4,"五":5,"六":6,"七":7,"八":8,"九":9};
    var mult = {"十":10, "拾":10, "百":100, "千":1000,"万":10000,"億":100000,"兆":1000000};

    String.prototype.toArabiaSuuji = function()
    {
    	var i, ch, stack = [], inner = false, buf = this.split('');

    	for(i=buf.length;0<=i;i--)
        {
        	if(inner)
            {
            	ch = mult[buf[i]];
            	if(ch)
                {
                	stack.push('+', ch);
                	buf[i] = '';
                	continue;
                };

            	ch = base[buf[i]];
            	if(ch)
                {
                	stack.push('*', ch);
                	buf[i] = '';
                	continue;
                };

            	if(stack.length)
                {
                	buf[i+1] = eval(stack.join(''));
                	stack = [];
                };

            	inner = false;
            }
        	else
            {
            	ch = mult[buf[i]];
            	if(ch)
                {
                	stack.push(ch);
                	ch = base[buf[i+1]];
                	if(ch)
                    {
                    	stack = [ch, '+'].concat(stack);
                    	buf[i+1] = '';
                    };
                	buf[i] = '', inner = true;
                	continue;
                };
            };
        };

    	if(stack.length)
        {
        	buf[0] = eval(stack.join(""));
        };

    	return buf.join('');
    };
})();


ToDo

追記

一億五千万円とかまったく出来ないでのやり直し。