[GameMaker: Studio] String Split / 文字列分割

gms_string_split_1

GameMaker: Studioにはゲーム開発に十分な命令が用意されていますが、「え?これできないの?」と思うこともたまにあります。

例えばurlencode/urldecodeや10進16進変換、文字列分割なんかの命令がありません。
しかし、命令として用意されていないだけで自分でScriptを作ってしまえばいいので、今回は文字列分割を紹介します。

■使い方

a = ds_list_create(); b = ecl_script_string_split("Emily & Charlotte Lounge", " ", 0); for(i=0; i<b; i++) show_debug_message(string(i) + " = " + ds_list_find_value(a, i)); // 0 = Emily // 1 = & // 2 = Charlotte // 3 = Lounge b = ecl_script_string_split("Emily & Charlotte Lounge", " ", 3); for(i=0; i<b; i++) show_debug_message(string(i) + " = " + ds_list_find_value(a, i)); // 0 = Emily // 1 = & // 2 = Charlotte Lounge

■ecl_script_string_split
// argument0 : id of ds_list // argument1 : string // argument2 : separater (string) // argument3 : limit (0 is all) var myds_id = argument0; var myds_str = string(argument1); var myds_sep = string(argument2); var myds_maxcnt = argument3; ds_list_clear(myds_id); if((myds_str == "")||(myds_sep == "")) return 0; var myds_dmys0 = ""; var myds_lp0 = 0; var myds_lp2 = string_length(myds_str); var myds_lp3 = string_length(myds_sep); while(myds_lp0 == 0) { var myds_pos = string_pos(myds_sep, myds_str); if((myds_maxcnt > 0)&&((ds_list_size(myds_id) + 1) >= myds_maxcnt)) myds_pos = 0; if(myds_pos <= 0) { ds_list_add(myds_id, myds_str); myds_lp0++; } else { myds_dmys0 = ""; if(myds_pos > 1) { myds_dmys0 = string_copy(myds_str, 1, myds_pos - 1); } ds_list_add(myds_id, myds_dmys0); myds_dmys0 = string_delete(myds_str, 1, myds_pos - 1 + myds_lp3); myds_str = myds_dmys0; } } if(ds_list_empty(myds_id) == true) return 0; return ds_list_size(myds_id);