>alphabeticやnumericの様な関数
一体どんなものなのか軽くググってみましたが、つまり「英数字以外の文字は削除したい」
ということでしょうか?
別スレで借用したコードにあったAPIを利用して以下のようなモジュールを作ってみました。
ついでに「全角文字を半角に変換」「大文字を小文字に変換」という処理も行っています。
#include "kernel32.as"
#include "user32.as"
#module
#const LOCALE_SYSTEM_DEFAULT 0x800
#const LCMAP_HALFWIDTH 0x400000
#defcfunc alfnum str _s,local s,local res
w=strlen(_s)+1 : sdim s,w
LCMapString LOCALE_SYSTEM_DEFAULT,LCMAP_HALFWIDTH,_s,-1,varptr(s),w
//↑の2行は全角文字を半角に変換する処理。不要なら削除の上、以下を実行してください。
//s=_s
w=strlen(s) : sdim res,w+1 : p=0
repeat w
x=peek(s,cnt) //元の文字列のcntバイト目を取り出す
IsDBCSLeadByte x : if stat : continue cnt+2 //「2バイト文字の1バイト目」の場合は2バイト後に飛ぶ
IsCharAlphaNumeric x : if stat=0 : continue //アルファベットでも数字でもない場合は次のバイトへ
poke res,p,x : p++ //結果に出力
loop
CharLower varptr(res) //大文字を小文字に変換(不要ならこの行は削除してください)
return res
#global
//以下、使用例
mes alfnum("あ1い2う3えAおbかcXYZ") //「123abcxyz」と表示される