2012-10-09 18 views
6

Esiste una soluzione integrata in Delphi 2007 per verificare se una TStringList contiene una parte di un determinato valore?Delphi: TStringList.Contains?

es .:

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

Ricerca di "Si tratta di una" si suppone per fornire me "vero", dal momento che i primi due elementi contengono questo partwise.

L'unico metodo io sappia finora è TStringList.find(string,integer), ma questo esegue un confronto stringa completa, vale a dire solo alla ricerca di Questa è una stringa tornerà vero.

Qualche suggerimento?

risposta

10

non integrato, ma è possibile utilizzare la funzione Pos sulla proprietà Text:

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

E se si vuole che l'integrazione, è possibile creare una classe di supporto per TStrings.

5

Non direttamente, n. È necessario:

1) chiamare Pos() sulla proprietà Text, che non è efficiente se si dispone di un sacco di stringhe.

2) scorrere l'elenco manualmente, chiamando Pos() su ogni String. Più efficiente, ma anche più codifica.

3) derivare una nuova classe da TStringList ed eseguire l'override il suo metodo virtuale CompareStrings() per confrontare le stringhe come vuoi (l'implementazione di default semplici chiamate AnsiCompareStr() o AnsiCompareText(), a seconda della proprietà CaseSensitive). Restituisci 0 se trovi una corrispondenza. È quindi possibile utilizzare il metodo TStringList.Find(), che chiama internamente CompareStrings() (fare attenzione, così è TStringList.Sort(), ma è possibile evitarlo se si chiama invece TStringList.CustomSort()).