作成してみました。(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 もありますが、今回の件の場合だとデフォルト引数指定も使えますね。
コメントを投稿