全角混じり文字列を数値に変換

http://d.hatena.ne.jp/eiji8pou/20110822/1314019682を使った上で、以下のスクリプトも貼る。

do
	-- 変換テーブルを定義
	local atoi_map = setmetatable({}, {__index=function() return "" end})
	for i=0, 9 do
		atoi_map[tostring(i)] = tostring(i) -- 半角登録
		atoi_map[string.char(130, 79+i)] = tostring(i) -- 全角登録
	end
	-- 記号を変換テーブルに登録
	atoi_map["−"] = "-"
	atoi_map["-"] = "-"
	atoi_map["+"] = "+"
	atoi_map["+"] = "+"
	atoi_map["."] = "."
	atoi_map["."] = "."

	-- 登録。
	-- 早い話が、数字として認識できそうな文字を数字にして、残りは削除して、
	-- その文字列に対してtonumberをして返す何か。
	string.atoi = function(ob, base)
		base = base or 10
		local res = ob:letters()
		for i, v in ipairs(res) do res[i] = atoi_map[v] end
		return tonumber(table.concat(res, ""), base)
	end
end

NScripter側から使う場合

NSExec("luasub atoi2")
function NSCOM_atoi2()
	local ref = NSPopIntRef()
	NSPopComma()
	NSSetIntValue(ref, NSPopStr():atoi())
end

atoi2命令を追加する。
これは、itoa2が、数値を全角文字列に変えるのと同じで、全角文字数字を解釈して数値に変換する。
また、数値以外が含まれている場合、それを無視する効果もある。
"日本語1020"と言った文字列が、1020と言う数値に変換される。