जांचें कि फ़ाइल में स्ट्रिंग मौजूद है या नहीं

मेरे पास कोड का निम्न भाग है जो एक टेक्स्ट खोलता है फ़ाइल और फ़ाइल में सभी पंक्तियां पढ़ता है और इसे स्ट्रिंग सरणी में संग्रहीत करता है।

Which then checks if the string is present in the array. However the issue I'm facing is that whenever a string is found, it always shows "there is a match" as well as "there is no match". Any idea how to fix this?

इस कोड को चेक करें:

using (StreamReader sr = File.OpenText(path))
{
    string[] lines = File.ReadAllLines(path);
    for (int x = 0; x < lines.Length - 1; x++)
    {
        if (domain == lines[x])
        {
            sr.Close();
            MessageBox.Show("there is a match");
        }
    }
    if (sr != null)
    {
        sr.Close();
        MessageBox.Show("there is no match");
    }
}
0

5 उत्तर

अत्यधिक जटिल लगता है, किसी फ़ाइल में स्ट्रिंग मौजूद है या नहीं, तो आप लाइन या कुछ भी जांचने का कोई कारण नहीं हैं। आप बस अपने सभी कोड को प्रतिस्थापित कर सकते हैं:

if(File.ReadAllText(path).Contains(domain))
{
    MessageBox.Show("There is a match");
}
0
जोड़ा

सबसे आसान तरीका:

string content = File.ReadAllText(path);
if (content.IndexOf(domain) > -1)
{
  //domain exists
}
else
{
  //domain does not exist
}

और अब अपने कोड का विश्लेषण करने के लिए:

पहला, आप StreamReader उदाहरण बना रहे हैं, लेकिन आप इसे बाद में अपने कोड में उपयोग नहीं करते हैं।

दूसरा, फ़ाइल में डोमेन नाम की एकाधिक घटना होने पर क्या होगा? आपके कोड में आपको अपने कोड में एकाधिक 'एक मैच है' मिलेगा।

using (StreamReader sr = File.OpenText(path))//you can remove this line
{
    string[] lines = File.ReadAllLines(path);//as you are not using it here
    for (int x = 0; x < lines.Length - 1; x++)
    {
        if (domain == lines[x])
        {
            sr.Close();
            MessageBox.Show("there is a match");
            hasMatch = true;
            break;//exit loop if found
        }
    }

    if (!hasMatch)
    {
       //there is no match
    }

    if (sr != null)//you dont need this if you remove it from the beginning of the code
    {
        sr.Close();
        MessageBox.Show("there is no match");
    }
}
0
जोड़ा

मैं सेटिंग और ध्वज की सिफारिश करता हूं और इसे निम्न प्रकार से जांचता हूं ...

using (StreamReader sr = File.OpenText(path))
{
    string[] lines = File.ReadAllLines(path);
    bool isMatch = false;
    for (int x = 0; x < lines.Length - 1; x++)
    {
        if (domain == lines[x])
        {
            sr.Close();
            MessageBox.Show("there is a match");
            isMatch = true;
        }
    }
    if (!isMatch)
    {
        sr.Close();
        MessageBox.Show("there is no match");
    }
}

शुभ लाभ!

0
जोड़ा
एक जादू की तरह काम करता है! मदद करने के लिए धन्यवाद!
जोड़ा लेखक BryanZest, स्रोत
आपका बहुत स्वागत है!
जोड़ा लेखक gpmurthy, स्रोत

आप इस कोड को आजमा सकते हैं:

 using (StreamReader sr = File.OpenText(path))
                        {
                            string[] lines = File.ReadAllLines(path);
                            for (int x = 0; x < lines.Length - 1; x++)
                            {
                                if (lines[x].Contains(domain, StringComparison.InvariantCultureIgnoreCase)
                                {
                                    sr.Close();
                                    MessageBox.Show("there is a match");
                                }
                            }
                            if (sr != null)
                            {
                                sr.Close();
                                MessageBox.Show("there is no match");
                            }
                        }
0
जोड़ा
एक मैच मिलने पर भी यह "कोई मैच नहीं है" संवाद दिखाएगा। यदि आप string.Contains() के उपयोग को हाइलाइट करना चाहते हैं, तो मैं उत्तर को स्पष्ट करता हूं।
जोड़ा लेखक chwarr, स्रोत

असल में आपको पूरी फाइल को स्मृति में पढ़ने की जरूरत नहीं है। फ़ाइल। रीडलाइन विधि है जो आपको पूरी फाइल पढ़ने के बिना फ़ाइल लाइनों को एक-एक करके गणना करने की अनुमति देता है। आप निम्न विधि बना सकते हैं

private bool DomainExists(string domain)
{
    foreach(string line in File.ReadLines(path))
        if (domain == line)
            return true;//and stop reading lines

    return false;
}

इस विधि का उपयोग इस तरह दिखता है:

if (DomainExists(domain))
    MessageBox.Show("there is a match");
else
    MessageBox.Show("there is no match");

इसके अलावा दो तरफ नोट्स - आपको StreamReader की आवश्यकता नहीं है यदि आप File.ReadAllLines के साथ लाइनें पढ़ रहे हैं (यह आंतरिक रूप से पाठक बनाता है)। बस जांचें - आप कहीं भी sr चर का उपयोग नहीं करते हैं। और दूसरा नोट - यदि आप इसे ब्लॉक में लपेटते हैं तो आपको स्ट्रीम को मैन्युअल रूप से बंद करने की आवश्यकता नहीं है। उस स्थिति में धारा का निपटान किया जाएगा और स्वचालित रूप से बंद कर दिया जाएगा।

0
जोड़ा