昔自分用に作ったモジュールです
分かりにくいと思いますが、理解しないと意味がないんで…
#module
#deffunc RearRange var ans,str _data,int p,int h,str rear
/* RearRange p1, p2, p3, p4, p5
p1 :変換結果
p2 :元の文字列
p3 :置き換え始めのインデックス
p4 :置き換える文字数
p5 :置き換える文字列
指定した文字列を、p2,p3で指定した条件で文字を置き換えます
*/
data = _data
// ↓ 0〜p , p+h〜終りまでの文字列を抜き出し、欠けた部分にrearを代入
ans = strmid(data,0,p) + rear + strmid(data,p+h,strlen(data))
return
#deffunc ComRange var ans ,str _data ,array com ,array rear
/* ComRange p1, p2, p3, p4
p1 :変換結果
p2 :元の文字列
p3 :置き換えられる文字列型配列
p4 :置き換える文字列型配列
指定した文字列の中の、p3で指定した文字列を検索し、p4に置き換えます
*/
sdim ans
ans = _data
repeat
if cnt+1 > length(com) : break // すべて検索し終わったら終了
rcnt = cnt
bp = 0
repeat
p = instr(ans, bp, com(rcnt))// bpバイト目から文字列の検索
if p = -1 : break// なかったら次の文字列へ
// 置き換え
RearRange ans ,ans ,bp+p ,strlen(com(rcnt)) ,rear(rcnt)
bp = bp+p+strlen(rear(rcnt))// 次検索するインデックスの調整
loop
loop
return
#global
a = "俺様はお前が世界一好きだ!"
mes a
b = ""
com = "俺様", "お前", "世界一"
rear = "僕", "あなた", "宇宙一"
ComRange b, a, com, rear
mes b