HSPのstrlenってバイト数を返すので、日本語と英語が混じってたらうまく文字数数えられないよね。
ってことで、文字数を返す関数を作ってみた。
文字をUnicodeに変換して(全て2バイト文字になる)から1文字ずつ切り出していき、終わりになったらループを抜けるだけですが。
というのもtxt2exoで字間設定作ってる時に必要になったので、メモも兼ねて。
#module ;文字数を数えるモジュール #defcfunc charalen str a i=0 ;文字数カウンタ ;全部英字ならUnicode変換で2倍で最大。 sdim buf,strlen(a)*2+2 cnvstow buf,a repeat tmp = wpeek(buf,cnt*2) if tmp = 0 : break i=i+1 loop return i #global text="HSPでいろんな文字が混じってるときに文字数を返す関数だよ!" mes charalen(text)
こんな感じで使ってみてください。strlen()と同じ感覚で使えると思います。
例では30と返ってきます。
なんかもっと効率よく書けそうだけど初心者なのでこれくらいしか書けないよ。もっと勉強しないと…
*6/29追記*
64字以上かつ全て英数字の場合にエラーになるのを修正。
四面楚歌
三寒四温
間違えました_(._.)_