2011-06-12 12 views
12

मैं इस कोड है:मैं कैसे जांचूं कि सरणी में एक स्ट्रिंग मौजूद है या नहीं?

var 
    ExtString: string; 
const 
    Extensions : array[0..4] of string = ('.rar', '.zip', '.doc', '.jpg', '.gif'); 

if ExtString in Extensions then 

अंतिम पंक्ति पर, मैं कोई त्रुटि मिलती है:

[DCC Error] E2015 Operator ('then') not applicable to this operand type

मुझे लगता है कि मैं ऐसा नहीं कर सकते, तो मैं कैसे ठीक से मेरी कार्य कर सकते हैं?

+0

** ** ऑपरेटर में इन ऑपरेंड प्रकारों पर लागू नहीं है –

+1

यह एक स्पष्टीकरण है कि ओपी का प्रयास क्यों नहीं हुआ, लेकिन यह कोई वास्तविक जवाब नहीं है क्योंकि सवाल यह था कि "मैं इस कार्य को सही तरीके से कैसे कर सकता हूं?" – jpfollenius

+0

की संभावित डुप्लिकेट [अगर एक स्ट्रिंग (जेनरिक) के बिना एक सूची में है सबसे अच्छा तरीका खोजने के लिए] (http://stackoverflow.com/questions/246623/best-way-to-find-if-a-string-is- में एक सूची-बिना-जेनरिक) –

उत्तर

18

क्या आप स्ट्रिंग की किसी सरणी में एक स्ट्रिंग के लिए जाँच नहीं कर सकते हैं, in का उपयोग कर पाया है के रूप में।

आप if बयान के बजाय इस सुविधा का उपयोग कर सकते हैं।

function StrInArray(const Value : String;const ArrayOfString : Array of String) : Boolean; 
var 
Loop : String; 
begin 
    for Loop in ArrayOfString do 
    begin 
    if Value = Loop then 
    begin 
     Exit(true); 
    end; 
    end; 
    result := false; 
end; 

आप इस तरह यह कह सकते हैं।

if StrInArray(ExtString,Extensions) then

StrUtils.pas यह पहले से ही परिभाषित किया गया है।

function MatchStr(const AText: string; const AValues: array of string): Boolean; 
+4

+1 हालांकि दुर्भाग्य से नामित किया गया है। यह एक क्रिया के बजाय एक संज्ञा होना चाहिए। मुझे कहना होगा कि मैं नए निकास वाक्यविन्यास का प्रशंसक नहीं हूं। लेकिन यदि आप इसका उपयोग करने जा रहे हैं तो इसे लगातार इस्तेमाल नहीं करना चाहिए। परिणाम और निकास() का उपयोग उसी दिनचर्या में पार्स करना मुश्किल बनाता है। –

+3

केस-संवेदनशीलता के बारे में सावधान रहें। फ़ाइल सिस्टम केस-असंवेदनशील है और आप .JPG एक्सटेंशन के साथ बहुत सी फाइलें पा सकते हैं। उपरोक्त कोड इसे याद करेगा। – Misha

+1

@ मिशा: यही 'मैचटेक्स्ट' है। कुछ डेल्फी संस्करणों में, यह केवल 'AnsiMatchText' (और शायद' WideMatchText' 'WideStrings.pas' में मौजूद है)। – afrazier

8

निरंतर सरणी से एक TStringList उदाहरण आरंभ करें और IndexOf() का उपयोग करें।

+2

भी दिग्गज, सरल पाश बेहतर –

+1

नहीं करता है, तो यह अक्सर किया जाता है और TStringList लगातार है। कौन जानता है कि इसके लिए और क्या उपयोग किया जा सकता है? – Misha

+1

स्ट्रिंग सूची लगातार बनाएं और आप थ्रेड सुरक्षा छोड़ दें। यहां तक ​​कि आपको स्ट्रिंग सूची को असाइन करना है जो व्यर्थ है। लूप बेहतर सवाल नहीं है। अखरोट को तोड़ने के लिए स्ट्रिंग सूची स्लेजगेमर है। –

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

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