全角混じり文字列を数値に変換
Shift-JIS対応の文字列分割等 - 永字八法を使った上で、以下のスクリプトも貼る。
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と言う数値に変換される。