HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0206
ミルHSP3Dishでspilit命令の代用5解決


ミル

リンク

2014/2/6(Thu) 18:29:04|NO.59724

HSP3Dishを使っているのですが、Androidでsplit命令を使うとsplit命令の所で落ちてしまいます。
調べてみたらHSP3Dishではsplitは未対応とのことでどうにかsplitと同じような動作をさせたいです。
なにかいい方法はないでしょうか?



この記事に返信する


Tetr@pod

リンク

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

使い方が間違っているでしょうか?



HIJIKI

リンク

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さん
ありがとうございます!
これでなんとかなりそうです!
お二人方、こんな短時間でよく思いつくなぁ…すごいです



Tetr@pod

リンク

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



ONION software Copyright 1997-2021(c) All rights reserved.