†REXXのどろぬま†
作成開始日 2013.08.14
最終更新日 2021.06.04
REPLACE(操作の対象となる文字列、置換前文字列、置換後文字列)
の順。REXXの標準的な引数並びとは異なるので注意。まあ、REXX流に合わせるのも簡単だが、どう考えても不自然だろう、REXX流。
Replace:PROCEDURE; parse arg st, st_before, st_after; Do While pos(st_before,st)>0 p=pos(st_before,st) st1=left(st,p-1) st2=substr(st,p+length(st_before)) st=st1||st_after||st2 End; return st exit;【注意】置換前文字列と置換後文字列が同じ(または含む)場合には、無限ループに陥る。アルゴリズムが少し間抜け。st_afterをstにくっつける処理は、ループの外に置かないと…そのうち直しましょ。
たとえば、URLのエンコード記号を通常の記号に変換するには;
st=replace(st,'%3A',':') st=replace(st,'%2F','/') st=replace(st,'%3F','?') st=replace(st,'%3D','=') st=replace(st,'%2C',',')