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