Pertanyaan periksa apakah string ada dalam file


Saya memiliki potongan kode berikut ini membuka sebuah teks file dan membaca semua baris dalam file dan menyimpannya ke dalam array string.

Yang kemudian memeriksa apakah string ada dalam array. Namun masalah yang saya hadapi adalah setiap kali string ditemukan, itu selalu terlihat "Ada kecocokan" serta "tidak ada pertandingan". Tahu bagaimana cara memperbaikinya?

periksa kode ini:

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");
    }
}

4
2017-12-01 06:08


asal


Jawaban:


Saya akan merekomendasikan mengatur dan menandai dan memeriksanya sebagai berikut ...

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");
    }
}

Semoga berhasil!


3
2017-12-01 06:12



Kedengarannya terlalu kompleks, tidak ada alasan untuk memeriksa per baris atau apa pun jika Anda ingin tahu apakah string ada dalam file. Anda dapat mengganti semua kode Anda hanya dengan:

if(File.ReadAllText(path).Contains(domain))
{
    MessageBox.Show("There is a match");
}

19
2017-12-01 06:12



Sebenarnya Anda tidak perlu membaca seluruh file ke dalam memori. Ada File.ReadLines metode yang memungkinkan Anda menghitung satu baris satu per satu, tanpa membaca seluruh file. Anda dapat membuat metode berikut

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

    return false;
}

Penggunaan metode ini terlihat seperti:

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

Juga dua catatan samping - Anda tidak perlu StreamReader jika Anda membaca garis dengan File.ReadAllLines (Ini menciptakan pembaca secara internal). Cukup periksa - Anda bahkan tidak menggunakannya sr variabel di mana saja. Dan catatan kedua - Anda tidak perlu menutup secara manual, jika Anda membungkusnya using blok. Dalam hal ini aliran akan dibuang dan ditutup secara otomatis.


2
2017-12-01 07:29



Cara paling sederhana:

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

dan sekarang untuk menganalisis kode Anda:

Pertama, Anda membuat instance StreamReader, tetapi Anda tidak menggunakannya nanti di kode Anda.

Kedua, bagaimana jika nama domain memiliki beberapa kemunculan dalam file? Dalam kode Anda, Anda akan mendapatkan beberapa 'ada kecocokan' dalam kode Anda.

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
2017-12-01 09:44



Anda dapat mencoba kode ini:

 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");
                            }
                        }

-1
2017-12-01 06:12



Mencoba coba tangkap:

string x;

string log = @"C:\Users\Log.txt";

string ruta = @"C:\Users\x.txt";

if (File.Exists(ruta))
{                    
    try
    {
        x = File.ReadAllText(ruta);  
    }
    catch (Exception ex)
    {
        File.AppendAllText(ruta, "Something");
        File.AppendAllText(log, Environment.NewLine + DateTime.Now.ToString() + ": The file not contain a string. " + ex.Message);
    }
}

-1
2018-06-12 18:29