個人的には気になってた関数です。(欲しかった関数です。)
で、ちょっとためしてみた。
以下、ソースコード
- 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 <vcl.h>
- #include <strutils.hpp>
- #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);
- }
- //---------------------------------------------------------------------------
- </strutils.hpp></vcl.h>
2 件のコメント:
ListBox1.Items の DelimitedText を使えばすむと思いますがどうでしょう?
今までは、自作するか、ご指摘のような
メソッドを使っていましたが、文字列を分割するためだけに、クラスを生成するのは、どうかなぁ?というのがありまして、軽量な関数が欲しいと思っておりました。
コメントを投稿