2008-10-29 19 views
26

मैं इस तरह कुछ करना चाहते हैं:सबसे अच्छा तरीका खोजने के लिए

Result = 'MyString' in [string1, string2, string3, string4]; 

यह तार के साथ उपयोग नहीं किया जा सकता है और मैं की तरह कुछ करने के लिए नहीं करना चाहते हैं यह:

Result = (('MyString' = string1) or ('MyString' = string2)); 

यह भी मुझे लगता है कि ऐसा करने के लिए एक स्ट्रिंगलिस्ट बनाना बहुत जटिल है।

क्या यह हासिल करने का कोई और तरीका है?

धन्यवाद।

function StringInArray(Value: string; Strings: array of string): Boolean; 
var I: Integer; 
begin 
    Result := False; 
    for I := Low(Strings) to High(Strings) do 
    Result := Result or (Value = Strings[I]); 
end; 

वास्तव में, आप स्ट्रिंग्स में प्रत्येक तार के साथ MyString तुलना करते हैं:

उत्तर

50

आप AnsiIndexText (स्थिरांक AnsiString AText, स्ट्रिंग AValues ​​की स्थिरांक सरणी) इस्तेमाल कर सकते हैं: पूर्णांक या MatchStr (स्थिरांक AText: स्ट्रिंग; स्थिरांक AValues: स्ट्रिंग की सरणी): बूलियन;

कुछ

Result := (AnsiIndexText('Hi',['Hello','Hi','Foo','Bar']) > -1); 

या

Result := MatchStr('Hi', ['foo', 'Bar']); 

AnsiIndexText तरह पहली स्ट्रिंग यह AValues ​​कि AText केस-insensitively मैचों में पाता 0 ऑफसेट सूचकांक देता है। यदि AText द्वारा निर्दिष्ट स्ट्रिंग में (संभावित रूप से केस-असंवेदनशील) मैच AVALues, AnsiIndexText रिटर्न -1 में नहीं है। तुलना वर्तमान सिस्टम लोकेल पर आधारित हैं।

MatchStr निर्धारित करता है कि सरणी AValues ​​में तार से कोई भी एक स्ट्रिंग एक मामले संवेदनशील तुलना का उपयोग कर AText द्वारा निर्दिष्ट। यह सही होता है यदि सरणी मिलान में स्ट्रिंग्स में से कम से कम एक स्ट्रिंग, या स्ट्रिंग मैच में से कोई भी गलत नहीं है।

नोट AnsiIndexText केस-insensitively है और MatchStr केस संवेदी है तो मैं इसे अपने उपयोग पर निर्भर करता है लगता है

संपादित करें: 2011/09/03: बस इस जवाब मिल गया है और सोचा था कि मैं एक नोट जोड़ना होगा कि, डेल्फी 2010 में MatchText फ़ंक्शन भी है जो MatchStr जैसा मामला है लेकिन मामला अंतर्निहित है।- लैरी

+0

असल में एक बेहतर है, बस स्ट्रूट्स.pas में थोड़ा सा खोजा और मैचस्ट्रेट पाया जो एक बूलियन लौटाता है: परिणाम: = MatchStr ('हाय' , ['foo', 'bar']); कृपया इसे अपने उत्तर में जोड़ें। –

+0

MatchStr और MatchText डेल्फी 2007 में भी उपलब्ध हैं। –

+0

डेल्फी 7 के लिए समकक्ष 7? – CyprUS

1

यहाँ एक समारोह है कि काम करता है है। जैसे ही आप एक मिलान पाते हैं, आप लूप के लिए बाहर निकल सकते हैं।

+0

यह काम करता है, के साथ डेल्फी एक अपने कोड अपडेट कर लें (मूल्य: स्ट्रिंग; स्ट्रिंग्स: स्ट्रिंग की सरणी): बूलियन; var I: पूर्णांक; शुरू करें परिणाम: = झूठा; I: = कम (स्ट्रिंग्स) से उच्च (स्ट्रिंग्स) परिणाम: = परिणाम या (मूल्य = स्ट्रिंग्स [I]); अंत; –

+0

यह एक n00b कठिन है और संपादन सामग्री को सक्षम नहीं कर रहा है :( –

7

बुर्कहार्ड द्वारा कोड काम करता है, लेकिन एक मैच मिलने पर भी सूची में अनिवार्य रूप से पुनरावृत्त होता है।

बेहतर दृष्टिकोण:

function StringInArray(const Value: string; Strings: array of string): Boolean; 
var I: Integer; 
begin 
    Result := True; 
    for I := Low(Strings) to High(Strings) do 
    if Strings[i] = Value then Exit; 
    Result := False; 
end; 
-4

आप इस कोशिश कर सकते हैं: समारोह StringInArray:

Result := Pos(MyString, string1+string2+string3+string4) > 0 
+3

क्षमा करें लेकिन आपका समाधान सब्सट्रिंग के लिए सकारात्मक परिणाम देता है स्ट्रिंग्स जब यह नहीं होना चाहिए। उदाहरण के लिए Pos ('ca', 'cat' + 'dog') 1 देता है, लेकिन 0 की आवश्यकता होती है। Pos ('td', 'cat' + 'dog') 3 देता है, लेकिन 0 है – lkessler

+1

-1 झूठी सकारात्मक के लिए। –

+0

खराब समाधान, क्योंकि आवश्यक सभी तारों को आवश्यक नहीं है। सबसे अच्छा समाधान उपरोक्त @ Re0sless है। –

संबंधित मुद्दे