今、文字列の分割の処理を書いてるんですけど
その過程で色々思いついたので書いてみました

FILE名:FILE_str_opr.hsp
#module str_opr
//	文字列の始点と終点を渡して長さを得る
#defcfunc getl_at_str_opr int first,int _end
//	始点が終点より大きいとerror
if first>_end:return -1
return _end-first
//	文字列の始点と終点を指定して文字列の部分を得る
#defcfunc strmid_of_index_at_str_opr var _str,int _first,int __end
return strmid(_str,_first,getl_at_str_opr(_first,__end))
//	文字列の中から特定の文字列を検索して
//	文字列の始点、ヒットした位置
//	ヒットした文字列の終わりの位置、文字列の終わり。を
//	引数に代入する
//	文字列の中に特定の文字列があれば1を返す
//	なければ-1を返す
#defcfunc sep_i_instr_at_str_opr var _str,var search,var _1,var _2,var _3,var _4
tmp=instr(_str,0,search)
if tmp==-1:return-1
_1=0
_2=tmp
_3=tmp+strlen(search)
_4=strlen(_str)
return 1
//	文字列の中から特定の文字列を検索して
//	特定の文字列の場所までの文字列を_1に代入
//	特定の文字列を_2に代入
//	特定の文字列以降を_3に代入
//	文字列の中に特定の文字列があれば1を返す
//	なければ-1を返す
#defcfunc sep_str_on_instr_at_str_opr var __str,var _search,var _1,var _2,var _3
a=0:b=0:c=0:d=0
piyo=sep_i_instr_at_str_opr(__str,_search,a,b,c,d)
_1=strmid_of_index_at_str_opr(__str,a,b)
_2=strmid_of_index_at_str_opr(__str,b,c)
_3=strmid_of_index_at_str_opr(__str,c,d)
return piyo

#global
/*	TESTコード コメントアウト
s="abcde"
mes getl_at_str_opr(3,0)
mes getl_at_str_opr(0,3)
mes strmid(s,0,getl_at_str_opr(0,3))
mes strmid_of_index_at_str_opr(s,1,3)

a=0:b=0:c=0:d=0
s="abcdef"
ss="cde"
sss="z"
mes sep_i_instr_at_str_opr(s,sss,a,b,c,d)
mes sep_i_instr_at_str_opr(s,ss,a,b,c,d)
mes "a="+a
mes "b="+b
mes "c="+c
mes "d="+d
t="":tt="":ttt=""
mes sep_str_on_instr_at_str_opr(s,ss,t,tt,ttt)
mes t
mes tt
mes ttt
stop*/