文字列置換


機能:

 文字列を置き換えます。

 ※最近のDelphiにはStringReplace関数が用意されています。


解説:

 関数にしてみました。Srcの中のC1文字列をC2文字列に置換します。


ソースについて:

 基本的にASCII文字のみの動作を前提としています。

[Ex.1]
 自己呼出の関数になっていますので副作用があります。例えばSrcが
'ABCDEFG'の時、C1に'B'、C2に'Bz'を与えると無限ループします。気を付けて下さい(置換というより展開だな^^;)。

[Ex.2]
 無限展開はしませんが、少々泥臭くなってしまいました(^^;
 


[Ex.1]

function Replace(Src,C1,C2:String):String;
var
 Position:Integer;
 Dmy:String;
begin
 Dmy := Src;
 repeat
  Position := Pos(C1,Dmy);
  if Position >
0then
   begin
    Delete(Dmy,Position,Length(C1));
    Insert(C2,Dmy,Position);
    Replace(Dmy,C1,C2);
   end;
 until(Position <=
0);
 result := Dmy;
end;


[Ex.2]

function Replace(Src,C1,C2:String):String;
var
 Position1,
 Position2:Integer;
 Dmy:String;
begin
 Dmy := Src;
 result :=
'';
 Position2 :=
1;
 repeat
  Dmy := Copy(Dmy,Position2,Length(Dmy)-Position2+1);
  Position1 := Pos(C1,Dmy);
  if Position1 >
0then
   begin
    Delete(Dmy,Position1,Length(C1));
    Insert(C2,Dmy,Position1);
    Position2 := Position1+Length(C2);
    result := result + Copy(Dmy,1,Position2-1);
   end
  else
   begin
    result := result + Dmy;
   end;
 until(Position1 <=
0);
end;