文字列置換

機能:

 文字列を置き換えます。

 ※Delphi 4 以降には 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 > 0 then
      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 > 0 then
      begin
        Delete(Dmy, Position1, Length(C1));
        Insert(C2, Dmy, Position1);
        Position2 := Position1 + Length(C2);
        result := result + Copy(Dmy, 1, Position2 - 1);
      end
    else
      result := result + Dmy;
  until(Position1 <= 0);
end;

 BACK