2012-10-09 29 views
6

¿Hay alguna solución integrada en Delphi 2007 para comprobar si una lista de líneas de TString contiene una parte de un cierto valor?Delphi: TStringList.Contains?

ej .:

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

Buscando "Se trata de un" se supone que me entregue "verdadero", ya que los dos primeros elementos contienen este partwise.

El único método que soy consciente de lo que va es TStringList.find(string,integer), pero esto lleva a cabo una comparación de cadena completa, es decir, solamente la búsqueda de Esta es una cadena devolverá true.

¿Alguna sugerencia?

Respuesta

10

no están integrados, pero se puede utilizar la función Pos en la propiedad Texto:

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

Y si quieres que sea integrado, puede crear una clase auxiliar para TStrings.

5

No directamente, no. Tendría que:

1) llame al Pos() en la propiedad Text, que no es eficiente si tiene muchas cadenas.

2) recorra la lista manualmente, llamando al Pos() en cada String. Más eficiente, pero también más codificación.

3) derivar una nueva clase de TStringList y anular su método virtual CompareStrings() para comparar cadenas que le apetezca (la implementación predeterminada llamadas simples AnsiCompareStr() o AnsiCompareText(), dependiendo de la propiedad CaseSensitive). Devuelve 0 si encuentras una coincidencia. A continuación, puede utilizar el método TStringList.Find(), que llama al CompareStrings() internamente (tenga cuidado, también lo hace el TStringList.Sort(), pero puede evitarlo si llama al TStringList.CustomSort()).