Delphi Tips 
-----------------------------

0313  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2001/12/05 濱野 rev 1.5
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2001/12/27 濱野 編集
VBのMIDステートメント

Delphi6でVB互換の関数などが追加されました。
Mid関数もそのひとつですが、部分文字列の挿入
であるMidステートメントはありません。

S = "1234567890"
Mid(S, 3, 5) = "ABC"

そこで逆Mid関数ともいうべきMidステートメントを
シミュレートする手続きを作ってみました。

procedure MidInsert(var S1: String; P, N: Integer; S2: String);
var
  L: Integer;
begin
  L := Length(S1);
  if N > (L - P + 1) then
    N := (L - P + 1);
  if N > Length(S2) then
    N := Length(S2);
  Delete(S1, P, N);
  Insert(Copy(S2, 1, N), S1, P);
end;

{ テスト例: }
procedure TForm1.Button1Click(Sender: TObject);
var
  S: String;
begin
  S := '1234567890';
  MidInsert(S, 5, 3, 'ABC');
  ShowMessage(S);
end;

Delphiの文字列型は配列と同様の扱いも出来るのでDelete, Insert, Copyを
使わない別の方法もあります。一時オブジェクトが作成されない分、
こちらの方が高速に動作するかもしれません。

procedure MidInsert(var S1: String; P, N: Integer; S2: String);
var
  L, I: Integer;
begin
  L := Length(S1);
  if N > (L - P + 1) then
    N := (L - P + 1);
  if N > Length(S2) then
    N := Length(S2);
  StrMove(Pchar(@S1[P]), PChar(S2), N);
end;
参照: <文字列> <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp