作成してみました。(Delフサ様ご指摘ありがとうございます。)
でついでに、文字列の最後にDelemeterを付加するかどうかを指定できる
オーバーロード関数をも作ってみました。
以下、ソースコード
unit VbLikeStringUtil;
interface
uses
StrUtils,Types;
function JoinString(AStrings : Array of String; Delemeter: String) : String overload;
function JoinString(AStrings : Array of String; Delemeter: String; AddLastDelemeter : Boolean) : String overload;
implementation
uses
SysUtils;
function JoinString(AStrings : Array of String; Delemeter: String) : String overload;
begin
Result := JoinString(AStrings,Delemeter,false);
end;
function JoinString(AStrings : Array of String; Delemeter: String; AddLastDelemeter : Boolean) : String overload;
var
i : Longint;
begin
Result := '';
if (Length(AStrings) > 0) then
begin
//最後の
for i := low(AStrings) to high(AStrings)-1 do
begin
Result := Result + AStrings[i] + Delemeter;
end;
//文字配列の最後の要素
Result := Result + AStrings[high(AStrings)];
//最後にデリミターを付加する場合
if AddLastDelemeter then
begin
Result := Result + Delemeter;
end;
end;
end;
でテストコードはこんな感じ。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses
StrUtils,Types, VbLikeStringUtil;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
JoinItems : TStringDynArray;
begin
SetLength(JoinItems,5);
JoinItems[0] := 'イージス';
JoinItems[1] := 'ジャスティス';
JoinItems[2] := 'ザク';
JoinItems[3] := 'セイバー';
JoinItems[4] := 'グフ';
Assert('イージス|ジャスティス|ザク|セイバー|グフ'=JoinString(JoinItems,'|'));
Label1.Caption := JoinString(JoinItems,'|');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//空配列の場合は空文字を返す
Assert(''=JoinString([],'|'));
//通常の場合
Assert('ミリアリア|キラ|メイリン|バルトフェルド'
= JoinString(['ミリアリア','キラ','メイリン','バルトフェルド'],'|'));
//オプションの第3引数にTrueを指定すると文字列の最後にデリミタを付加します。
Assert('ミリアリア|キラ|メイリン|バルトフェルド|'
= JoinString(['ミリアリア','キラ','メイリン','バルトフェルド'],'|',true));
Label1.Caption := JoinString(['ミリアリア','キラ','メイリン','バルトフェルド'],'|',true);
end;
end.
ちなみに、今回の文字列は、Seedの自分の好きなキャラシリーズです。
1 件のコメント:
こんにちはー。
Assertで空文字の場合の対応など書いていただけて、助かります。
overload もありますが、今回の件の場合だとデフォルト引数指定も使えますね。
コメントを投稿