HSPは文字列をデフォルト状態では64バイト(正確には63バイト)分扱えるようになってます。バイト(byte)という単位は、全角文字(漢字とかひらがななど)を2バイト、半角文字(英文字,数字)は1バイトです。strlen関数は文字列の長さ(バイト単位)で取得するものです。
// すべて全角文字
a="あいうおえ"
mes ""+strlen(a)+"バイト"
// すべて半角文字
b="Hot Soup Processor HSP"
mes ""+strlen(b)+"バイト"
64バイトを超える文字列を扱いたい場合は、あらかじめsdim命令で変数領域を確保しときましょう。前回の変数の話にある文字列用の「入れ物」の大きさというのをあらかじめ指定するわけです。
// 512バイト分確保
sdim a,512
a="あいうおえ"
指定した文字が何バイト目にあるか調べるには、「instr」関数というのを使います。先頭は0バイトになります。検索しても見つからなかった場合は、−1が結果に返ります。
a="Hot Soup Processor"
check = instr(a,0,"Soup")
mes ""+check+"バイト目"
b="Hot Soup Processor"
check = instr(b,0,"Cup")
mes ""+check+"バイト目"
特定の位置から文字を取り出しますには、「strmid」関数というのを使います。先頭は0バイトになります。何バイト目から何バイト分を取り出すかを指定すると、切り出した結果がそのまま返ります。
a="Hot Soup Processor"
// 4バイト目から5バイト分取り出す
mes "("+strmid(a,4,5)+")"
指定文字までを取り出すには、「getstr」命令というのを使います。先頭は0バイトになります。システム変数strsizeには取り出した文字量(バイト)が代入されます。
a="Hot Soup Processor"
sdim kekka
// 半角スペースまでを取り出す
getstr kekka,a,0,' '
mes "("+kekka+")
a="HSP,Hot,Soup,Processor,getstr"
i=0
sdim b,100
repeat
// 「,」で区切られた文字を取り出す
getstr b,a,i,','
// 取り出した量(strsize)が0ならループを抜ける
if strsize=0 : break
mes b
// 次の取り出しインデックスに移動
i=i+strsize
loop
mes "(完了)"
テキストファイルを読み込んで、行番号を付けて表示します。「getstr」命令の第四パラメータに何も指定しないときは改行か終了コード(0x00)までの文字が取り出されます。(テキストファイルの利用はこの先のファイルの保存・読み込みの解説ページで。)
// テキストファイルの読み込み
notesel buf
noteload "readme.txt"
i=0
number=1
sdim b
repeat
// 1行を取り出す
getstr b,buf,i
mes ""+number+" : "+b+""
number++
// 10行を超えたらループを抜ける
if number>10 : break
// 次の取り出しインデックスに移動
i=i+strsize
loop
mes "(完了)"
Welcome to HSP sun. Here is a site to introduces HSP, a free script language system.