8

TStringListに特定の値の一部が含まれているかどうかを確認するための Delphi 2007 の統合ソリューションはありますか?

例えば:

List.AddObject('This is a string', customStringObject1); 
List.AddObject('This is a mushroom', customStringObject2); 
List.AddObject('Random stuff', customStringObject3); 

最初の 2 つの要素にはこれが部分的に含まれているため、 「This is a」を検索すると「true」が返されるはずです。

これまでに知っている唯一のメソッドは ですがTStringList.find(string,integer)、これは完全な文字列比較を実行します。つまり、This is a stringを検索するだけでtrue が返されます。

助言がありますか?

4

2 に答える 2

10

統合されていませんが、Text プロパティで Pos 関数を使用できます。

Pos('This is a', List.Text)

統合したい場合は、TStrings のクラス ヘルパーを作成できます。

于 2012-10-09T09:20:41.573 に答える
5

直接ではありません。次のいずれかを行う必要があります。

1) プロパティを呼び出しますPos()Text、文字列が多い場合は効率的ではありません。

Pos()2) リストを手動でループし、それぞれを呼び出しますString。より効率的ですが、より多くのコーディングも行います。

3) から新しいクラスを派生させ、TStringListその仮想CompareStrings()メソッドをオーバーライドして、必要に応じて文字列を比較します (プロパティに応じて、デフォルトの実装では単純にAnsiCompareStr()またはを呼び出します)。一致する場合は 0 を返します。その後、内部的に呼び出す メソッドを使用できます(注意してください。を呼び出すこともできますが、代わりに呼び出すことで回避できます)。AnsiCompareText()CaseSensitiveTStringList.Find()CompareStrings()TStringList.Sort()TStringList.CustomSort()

于 2012-10-09T21:26:58.220 に答える