個人的には気になってた関数です。(欲しかった関数です。)
で、ちょっとためしてみた。
以下、ソースコード
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} uses StrUtils,Types; procedure TForm1.Button1Click(Sender: TObject); var TestString : String; SplitResult:TStringDynArray; begin TestString := 'フリーダム,ジャスティス,デストロイ,セイバー'; SplitResult := SplitString(TestString,','); Label1.Caption := TestString; for TestString in SplitResult do begin ListBox1.Items.Add(TestString); end; end; end.
Visual Basicライクで非常に簡単に使えます。
内部的には、FindDelimiter関数を使ってDelemeterをみつけ
Copy関数で部分文字列を切り出してます。
これなら、下位バージョンでも実装できそうですね。
ところでFindDelimiter関数は、いつから存在したのでしょうか?
個人的には、Delphiにはまだまだ知らない便利な関数が一杯ありそうです。
2010.09.10 山本隆の開発日記で紹介して頂いたので
調子にのってC++ Builderで書いてみました。
(C++は自信がないので、役に立つかどうかわかりませんが・・・)
//--------------------------------------------------------------------------- #include#include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { UnicodeString TestString = "イージス|バスター|デュエル|ブリッツ|ストライク"; LabeledEdit1->Text = TestString; TStringDynArray SplitResult = SplitString(TestString,"|"); for (int i = 0; i < SplitResult.Length; i ++) { ListBox1->Items->Add(SplitResult[i]); } SplitResult.set_length(0); } //---------------------------------------------------------------------------
2 件のコメント:
ListBox1.Items の DelimitedText を使えばすむと思いますがどうでしょう?
今までは、自作するか、ご指摘のような
メソッドを使っていましたが、文字列を分割するためだけに、クラスを生成するのは、どうかなぁ?というのがありまして、軽量な関数が欲しいと思っておりました。
コメントを投稿