力技ですが、以前貼ったサンプルを改造して、キーワードを配列で指定できる文字列置換関数モジュールにしてみました。
これを使えば、どんな参照でも一応は対応できます。
#module
#define INTMAX 0x7ffffff
// multireplace() : 入力文字列内の文字列を置換して返す.
// s : 入力文字列.
// srch : 検索文字列の配列.
// rep : 置換文字列の配列.
// nbword : 検索、置換文字列配列の要素数.
#defcfunc multireplace str s, array srch, array rep, int nbword
src = s
dest = ""
dim srchidx,nbword
srch_end=0 // 検索し終えた区切り文字の数.
repeat nbword
srchrator=srch(cnt) : index=0
gosub *GET_NEXTINDEX : srchidx(cnt)=i
loop
*CUTTING_NEXT
if(srch_end<nbword){
nextidx=INTMAX
repeat nbword
if(srchidx(cnt)<nextidx){
nextidx=srchidx(cnt)
minidx=cnt
}
loop
srchlen=strlen(srch(minidx))
dest += strmid(src, idx, nextidx-idx) + rep(minidx)
idx=nextidx+srchlen
repeat nbword
if(srchidx(cnt)=nextidx){
srchrator=srch(cnt) : index=idx
gosub *GET_NEXTINDEX : srchidx(cnt)=i
}
loop
goto *CUTTING_NEXT
}
dest += strmid(src, idx, INTMAX);
return dest
*GET_NEXTINDEX
i=instr(src, index, srchrator)
if i<0 : i=INTMAX:srch_end++:return
i=index+i:return
#global
以下のスクリプトで、このモジュールを使って文字参照を4種類だけ置換してみます.
※例文はそこいらのページから適当に切り出してきたものです.
sdim srch,8,4
sdim rep,8,4
src="& Mid(myInputValue, i1, k1-i1) & " " & "=>" & vbTab & myOutput &"
srch(0)="<"
srch(1)=">"
srch(2)="&"
srch(3)="""
rep(0)="<"
rep(1)=">"
rep(2)="&"
rep(3)="\""
sdim ret,1024
ret = multireplace(src,srch,rep,4)
mes ret
もちろん、これでは置換テーブルが少なすぎますから、もっと本格的にやるならテーブルを追加しないといけません.
もっと真っ当な方法があるものならそっちがいいでしょう...
---
それ以前に置換モジュールは今さっき作ってろくすっぽテストしてません。取扱注意(こら