†REXXのどろぬま†

REPLACE:文字列置換関数

作成開始日 2013.08.14
最終更新日 2021.06.04

TRASLATE関数による置換は1文字単位のみで、文字列単位ではできない。そこで、文字列単位の置換関数Replaceを作成したみた。なお、引数の順序は;

  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',',')


【REXXのどろぬま目次】 【ホーム】