|
|
2014/2/6(Thu) 18:29:04|NO.59724
HSP3Dishを使っているのですが、Androidでsplit命令を使うとsplit命令の所で落ちてしまいます。
調べてみたらHSP3Dishではsplitは未対応とのことでどうにかsplitと同じような動作をさせたいです。
なにかいい方法はないでしょうか?
|
|
2014/2/6(Thu) 18:56:56|NO.59725
// HSP3Dish用split代替命令
// 使い方は、splitと同じです
// split A, "xyz", B と書くところを dsplit A, "xyz", B に変えると動作します
// ただし、技術的な問題で split A, "xyz", B, C のような使い方ができません
#ifndef dish_split
#module dish_split
#deffunc dsplit var in, str delimiter, array out, local index, local oldindex
sdim out
dim index
dim oldindex
repeat
oldindex = index
index = instr(in, index, delimiter)
if index < 0 : index = cnt : break
out(cnt) = strmid(in, index, index - oldindex)
loop
if index = 0 : out = in
return index + 1
#global
// splitをdsplitに置換するのが面倒な人は、下のコメントアウトを解除することでsplitがdsplitになります
/*
#undef split
#define split(%1, %2, %3) dsplit %1, %2, %3
*/
#endif
|
|
2014/2/6(Thu) 19:51:45|NO.59726
>Tetr@podさん
サンプルソースありがとうございます。
頂いたソースをdplit.hspで保存してインクルードしたのですが
永久ループしてるようで固まってしまいました。
#include "hsp3dish.as"
#include "dSplit.hsp"
Name=""
buf="あ\tい\tう\tえ\tお"
dsplit buf,"\t",Name
dialog Name
end
使い方が間違っているでしょうか?
|
|
2014/2/6(Thu) 19:52:50|NO.59727
先を越された!と思ってTetr@podさんのスクリプトを動かしてみましたが、
上手く動作していないようです。
申し訳ないのですが中身を読んだわけじゃないので、
Tetr@podさんの書いた処理が間違っているのか私の環境が悪いのかはわかりません。
他の方はどうでしょうか?
私の環境では下記のスクリプトで動きました。
#ifndef _strSplit_
#module _strSplit_
#deffunc strSplit str _text, str _separator, array put, local mid
sdim put: index = 0: text = _text: separator = _separator
repeat: i=cnt
mid = instr(text, , separator)
if( mid < 0 ){
ret = cnt
break
}
put(cnt) = strmid(text, 0, mid)
text = strmid(text, mid+strlen(separator), strlen(text))
loop
put(ret) = text
return ret+1
#global
a = "12,34,56"
strSplit a, ",", b
mes ""+stat+"個に分割しました。"
repeat stat
mes b(cnt)
loop
mes "----"
a = "abcdefghijk"
strSplit a, "def", b
mes ""+stat+"個に分割しました。"
repeat stat
mes b(cnt)
loop
mes "----"
a = "abcdefghijk"
strSplit a, ",", b
mes ""+stat+"個に分割しました。"
repeat stat
mes b(cnt)
loop
mes "----"
a = "a , b , c , d , e / f , g , h , i , j , k"
strSplit a, " , ", b
mes ""+stat+"個に分割しました。"
repeat stat
mes b(cnt)
loop
mes "----"
Tetr@podさんのスクリプト同様、HSPのユーザー定義命令の仕様的に
split buf, ",", a, b, c
といった不特定個数のパラメータを指定するのが出来ない気がしたので省略しています。
第3パラメータに渡した変数を文字列型配列変数として初期化し代入する仕様となっています。
| |
|
2014/2/6(Thu) 20:00:29|NO.59728
>HIJIKIさん
ありがとうございます!
これでなんとかなりそうです!
お二人方、こんな短時間でよく思いつくなぁ…すごいです
|
|
2014/2/6(Thu) 21:42:11|NO.59731
デバッグが手抜きすぎたorz
今更ながら修正版。
// HSP3Dish用split代替命令
// 使い方は、splitと同じです
// split A, "xyz", B と書くところを dsplit A, "xyz", B に変えると動作します
// ただし、技術的な問題で split A, "xyz", B, C のような使い方ができません
#ifndef dish_split
#module dish_split
#deffunc dsplit var in, str _delimiter, array out, local delimiter, local index, local oldindex, local temp
sdim delimiter
sdim out
dim index
dim oldindex
dim temp
delimiter = _delimiter
repeat
wait 0
oldindex = index
temp = instr(in, index, delimiter)
if temp < 0 : index = strlen(in) + 1
index += temp + strlen(delimiter)
out(cnt) = strmid(in, oldindex, index - oldindex - strlen(delimiter))
if index = strlen(in) + 1 + temp + strlen(delimiter) : index = cnt : break
loop
if index = 0 : out = in
return index + 1
#global
// splitをdsplitに置換するのが面倒な人は、下のコメントアウトを解除することでsplitがdsplitになります
/*
#undef split
#define split(%1, %2, %3) dsplit %1, %2, %3
*/
#endif
|
|