2013-08-05 10 views
5

मुझे यह समस्या है, मैं टेक्स्टबॉक्स से विशिष्ट शब्दों को खोजने के लिए स्ट्रिंग रीडर का उपयोग कर रहा हूं, अब तक बहुत अच्छा काम कर रहा है, हालांकि मुझे एक स्ट्रिंग सरणी के खिलाफ प्रत्येक पंक्ति में विशिष्ट शब्दों को कैसे जांचना है, इस तरीके खोजने की आवश्यकता है।सी # स्ट्रिंग रीडर क्लास

निम्नलिखित कोड काम करता है:

string txt = txtInput.Text; 
string user1 = "adam"; 
int users = 0; 
int systems = 0; 

using (StringReader reader = new StringReader(txt)) 
{ 
    while ((txt = reader.ReadLine()) != null) 
    { 
     if (txt.Contains(user1)) 
     { 
      users++; 
     } 
    } 
} 

अब, मैं एक स्ट्रिंग सरणी बनाया है एक से अधिक स्ट्रिंग स्टोर करने के लिए है, लेकिन विधि शामिल केवल एक स्ट्रिंग स्वीकार करने के लिए लगता है।

string[] systemsarray = new string[] { "as400", "x500", "mainframe" }; 

if(txt.Contains(systemsarray)) 
{ 
    systems++; 
} 
// error message: cannot convert from string[] to string 

क्या किसी को यह पता है कि यह कैसे करना है, या इसे सुधारने का एक तरीका है?

अग्रिम धन्यवाद।

उत्तर

8

आप देख रहे हैं लाइन में उन शब्दों में से किसी के अस्तित्व के लिए, कोशिश:

if(systemsarray.Any(word => txt.Contains(word))) 
{ 
    users++; 
} 
+0

या बस 'if (systemarray.Any (txt.Contains)) ' – I4V

+0

ओपी चाहता है कि निश्चित रूप से बताने के लिए मुश्किल है, लेकिन अगर उन्हें गिनती की आवश्यकता है, तो' किसी भी 'को' गणना 'के साथ बदलें और' सिस्टम 'में स्टोर करें '। – user7116

+0

हैलो रीड, बहुत बहुत धन्यवाद !!! यह मेरी समस्या हल हो गया! –

5

क्यों नहीं अपने आप को यह करने के लिए एक विस्तार विधि लिखना?

public static class StringExtensionMethods 
{ 
    public static bool ContainsAny(this string self, params string[] toFind) 
    { 
     bool found = false; 
     foreach(var criteria in toFind) 
      { 
       if (self.Contains(criteria)) 
       { 
        found = true; 
        break; 
       } 
      }; 

     return found; 
    } // eo ContainsAny  
} 

उपयोग:

string[] systemsarray = new string[] { "as400", "x500", "mainframe" }; 

if(txt.ContainsAny(systemsarray)) 
{ 
    systems++; 
} 
// error message: cannot convert from string[] to string 
+0

धन्यवाद, बहुत उपयोगी! –

4

आप अपने सरणी से प्रत्येक आइटम को निकालने के लिए की जरूरत है:

foreach (string item in systemsarray) 
{ 
if(txt.Contains(item)) 
{ 
    systems++; 
} 
} 
+0

धन्यवाद, अब काम कर रहा है, मैं इसकी सराहना करता हूं। –

+0

@LuameLudik, फिर से परेशान करने के लिए खेद है, मैं सोच रहा था कि डुप्लिकेट से छुटकारा पाने के लिए आप जानते हैं? मैंने कई चीजों की कोशिश की है और अभी भी काम नहीं कर रहा है, मैंने एक नया स्ट्रिंग ऐरे बनाया है और डुप्लिकेट को हटाने की कोशिश की है ... स्ट्रिंग [] system2 = new string [] {item}; आईनेमेरेबल distinctsystem = system2.Distinct(); foreach (distinctsystem में स्ट्रिंग स्ट्रिंग) { सिस्टम ++; } –

2

आप एक केस-संवेदी खोज चाहते हैं (as400AS400 से मेल खाएगा), आप कर सकते हैं यह

if (systemsarray.Any(x => x.Equals(txt, StringComparison.OrdinalIgnoreCase))) 
{ 
    //systemsarray contains txt or TXT or TxT etc... 
} 

यदि आप मामले को ध्यान में रखना चाहते हैं (या एक अलग enum मान चुनें) तो आप StringComparison.OrdinalIgnoreCase हटा सकते हैं।

+0

हाय, आपकी मदद के लिए धन्यवाद, मैंने जो कुछ किया वह सब पाठ को कम मामले में परिवर्तित करना था; इस तरह; स्ट्रिंग txt = txtInput.Text.ToLower(); लेकिन मैं इसे ध्यान में रखूंगा, धन्यवाद! –

+0

@ होक्सनमोया - आपका स्वागत है। साइड नोट के रूप में, लोअरकेस को कनवर्ट करना और जांचना अनुशंसित नहीं है। आपको आम तौर पर उपरोक्त तुलनात्मक जांच का उपयोग करना चाहिए या इसे इसके बजाय अपरकेस में परिवर्तित करना चाहिए [अधिक जानकारी] (http://stackoverflow.com/questions/234591/upper-vs-lower-case)। – keyboardP

+0

हाय! धन्यवाद, उस मामले में, मैं आपकी सलाह का पालन करूंगा। –

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