2016年11月6日日曜日

HSPの落とし穴(しましま模様)

セルディア見参!

まだあった! HSPの落とし穴!


なんだか恒例行事みたいになってきましたが、またまたHSP3dishの罠にはまってしまったので備忘録として載せておきます。

今回ご紹介するのはこちら!(TVショッピング風に)

文字列操作関数です。

以下の関数で、1番目の引数(検索される文字列変数)に文字列型の配列を指定し、かつ要素番号に変数を使うと、androidで動かした場合のみ落ちます。

instr
strmid
strtrim

以下のプログラムでコメントアウトしているところを外して動かしてみてください。落ちます。

#include "hsp3dish.as"

redraw 0
color 255, 255, 255
boxf

; 落ちない
pos 0, 0
color 0, 0, 0
_str = "ハロー ワールド"
mes _str

; 当然落ちない
_ret = instr(_str, 0, "ワ")
mes str(_ret)

; 落ちない
sdim _arrstr, 32, 4
_arrstr(2) = _str
mes _arrstr(2)
_ret = instr(_arrstr(2), 0, "ワ")
mes str(_ret)

; androidで落ちる
;_index = 2
;_ret = instr(_arrstr(_index), 0, "w")
;mes str(_ret)

; 落ちない
_mid = strmid(_str, instr(_str, 0, "ー"), instr(_str, 0, "ル") - instr(_str, 0, "ー"))
mes _mid

; androidで落ちる
;_index = 2
;_mid = strmid(_arrstr(_index), 1, 3)
;mes _mid

; 落ちない
_trim = strtrim(_str, 3, ' ')
mes _trim

; androidで落ちる
;_index = 2
;_trim = strtrim(_arrstr(_index), 3, ' ')
;mes _trim

; 落ちない
_rep = _str
strrep _rep, "ル", "ru"
mes _rep

; 意外と落ちない
_index = 3
_arrstr(_index) = _arrstr(2)
strrep _arrstr(_index), "ル", "ru"
mes _rep

; androidで落ちる
;_splitstr = "12,34,56"
;split _splitstr, ",", _split1, _split2, _split3
;mes _split1
;mes _split2
;mes _split3

redraw 1

不思議なのが、配列の要素数を変数ではなく数字で直書きすると動くところですね。
他に、文字列操作以外の関数でも同じように試してみましたが、特に落ちませんでした。文字列操作だけのようです。
noteselなどの複数行文字列操作も、特に問題ありませんでした。

なお、splitはそもそも配列でなくても落ちました。

そもそもHSP3dishで対応しているの?


一時期は、そもそもandroid上で対応していなさそうというお話も上がっていたようです。

http://hsp.tv/play/pforum.php?mode=pastwch&num=59791

ただ、今は上記のプログラムを動かしてわかる通り、全角文字列に対応しているようです。ルールを守って使えば、とりあえずは利用できるのかな? androidで利用できるようにしたという更新履歴が見つからないですが…いつ修正したんだろう。

splitだけは公式で現在正しく動作していないことが周知されています。

http://www.onionsoft.net/hsp/v34/doclib/hsp3dish_prog.htm#KNOWNBUG

まだまだ発展途上ですね…。

以上、お気をつけてHSP3dishライフをお楽しみください。
(あと修正を切実に願います)

0 件のコメント:

コメントを投稿