2012-10-09 25 views
6

Có giải pháp tích hợp nào trong Delphi 2007 để kiểm tra xem TStringList có chứa một phần của một giá trị nhất định không?Delphi: TStringList.Contains?

ví dụ .:

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

Tìm kiếm "Đây là một" có nghĩa vụ phải cung cấp cho tôi "true", kể từ khi hai yếu tố đầu tiên chứa partwise này.

Phương pháp duy nhất tôi biết là cho đến nay là TStringList.find(string,integer), nhưng điều này thực hiện so sánh chuỗi hoàn chỉnh, tức là chỉ tìm kiếm Đây là chuỗi sẽ trả về giá trị đúng.

Mọi đề xuất?

Trả lời

10

Không tích hợp, nhưng bạn có thể sử dụng chức năng Pos trên thuộc tính Text:

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

Và nếu bạn muốn nó được tích hợp, bạn có thể tạo ra một helper class cho TStrings.

5

Không trực tiếp, không. Bạn sẽ phải:

1) gọi Pos() trên thuộc tính Text, không hiệu quả nếu bạn có nhiều chuỗi.

2) lặp qua danh sách theo cách thủ công, gọi Pos() trên mỗi String. Hiệu quả hơn, nhưng cũng mã hóa nhiều hơn.

3) dẫn xuất một lớp mới từ TStringList và ghi đè CompareStrings() phương pháp ảo của nó để so sánh chuỗi tuy nhiên bạn muốn (việc thực hiện mặc định cuộc gọi đơn giản AnsiCompareStr() hoặc AnsiCompareText(), tùy thuộc vào CaseSensitive tài sản). Trả về 0 nếu bạn tìm thấy một trận đấu. Sau đó, bạn có thể sử dụng phương thức TStringList.Find(), gọi CompareStrings() nội bộ (hãy cẩn thận, do đó, TStringList.Sort(), nhưng bạn có thể tránh điều đó nếu bạn gọi số TStringList.CustomSort() thay thế).