流星群さんへ。
高速漢字判定のサンプルを紹介します。
漢字判定テーブル(_ascTable)の部分を増やすことで
大文字、小文字、数字などを一発で判定してくれます。
// 漢字判定のマクロ関数
#define ctype iskanji1(%1) (_ascTable(%1) & CTYPE_KANJI1)
#define ctype iskanji2(%1) (_ascTable(%1) & CTYPE_KANJI2)
// 漢字判定の記号定数
#const CTYPE_KANJI1 (%0001) ;漢字文字の第1バイト目(0x81-0x9F,0xE0-0xFC)
#const CTYPE_KANJI2 (%0010) ;漢字文字の第2バイト目(0x40-0x7E,0x80-0xFC)
// メイン部
*Init
dim _ascTable,256
repeat (0x9F-0x81+1),0x81 : _ascTable(cnt)|=CTYPE_KANJI1 : loop ;0x81-0x9F
repeat (0xFC-0xE0+1),0xE0 : _ascTable(cnt)|=CTYPE_KANJI1 : loop ;0xE0-0xFC
repeat (0x7E-0x40+1),0x40 : _ascTable(cnt)|=CTYPE_KANJI2 : loop ;0x40-0x7E
repeat (0xFC-0x80+1),0x80 : _ascTable(cnt)|=CTYPE_KANJI2 : loop ;0x80-0xFC
*Main
msg="アaイiウuエeオoアイウエオ"
mes strf("変換前=[%s]",msg)
RemoveKanjiCode msg,msg
mes strf("変換後=[%s]",msg)
stop
// 漢字文字の取り除き処理
#deffunc RemoveKanjiCode var _buff_,str _string_
sdim _buff_,strlen(_string_)+1
sdim s : s=_string_
dim n
dim c
repeat strlen(s)
c=peek(s,cnt)
if ( iskanji1(c) ){
continue (cnt+2)
}
poke _buff_,n,c
n++
loop
return n ;長さを返す
ワザとモジュールにしてませんので、色々と遊んでみて下さい。