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;
|
|