ランキング表示を作るときに、ちょっと困ったのが、文字の桁数揃え。
数字の桁なら、strf命令を使えばよいのだけど、文字列には使えない。
そこで考えるのは、昔々のBASIC世代の命令である、LEFT$、RIGHT$、MID$の御三家w
HSP3はBASIC風なので、同じ命令があるかなぁと思っていたが、MID$に当たる、strmid命令のみだった。
まぁ、strmid命令でもLEFT$、RIGHT$と同じ結果となるようにできるので、いいやと思っていた。
でも、いざ使ってみると、ちょっと面倒だった。
strmid命令の書式はこれ。
文字列の一部を取り出す
val = strmid(p1,p2,p3)
p1=変数名 : 取り出すもとの文字列が格納されている変数名
p2=-1~ : 取り出し始めのインデックス
p3=0~ : 取り出す文字数
HSP3ヘルプより
面倒なのは、p1が変数のみというところ。
一時的に桁を揃えたいだけなので、BASICの時はこんな風に書いていた。
'文字を右詰めにして7文字に揃えて表示する PRINT RIGHT$(" "+S$,7)
S$には0~7文字の文字列が代入されていて、必ず7文字分にしたいので、スペース7文字+S$にした後、右から7文字分だけを取得できる。
そして、strmid命令は、一つ目の引数に変数名しか書けないので、この書き方はエラーになる。
なので、先に変数を用意しておかなくてはならない。
;文字を右詰めにして7文字に揃えて表示する a=" "+s mes strmid(a,-1,7)
前置きがだいぶ長くなったが、この変数をいったん介さないと実行できないのが面倒なので、ユーザ関数を定義しました。という話でしたw
#defcfunc leftstr str bas1,int n1 ;LEFT$命令相当 fun_res="" fun_ss=bas1 fun_sslen=strlen(fun_ss) fun_num=limit(n1,0,fun_sslen) fun_res=strmid(fun_ss,0,fun_num) return fun_res #defcfunc rightstr str bas1,int n1 ;RIGHT$命令相当 fun_res="" fun_ss=bas1 fun_sslen=strlen(fun_ss) fun_num=limit(n1,0,fun_sslen) fun_res=strmid(fun_ss,-1,fun_num) return fun_res
これを使って、ランキング画面の各項目を綺麗に揃えて表示できましたとさ。