Как увидеть, является ли текстовое поле.Текст является одним из слов в текстовом файле

#c# #winforms

#c# #winforms

Вопрос:

Я хочу посмотреть, является ли текстовое поле text одним из слов в загруженном файле .txt.

Единственное, что я знаю, это то, что я могу использовать if (words.Contains(txtBox.Text) , но он найдет любую букву в текстовом файле и будет действовать так, как будто слово находится в файле.

         private void btnLogin_Click(object sender, EventArgs e)
        {
            string accessKeys;

            WebClient wc = new WebClient();
            accessKeys = wc.DownloadString("http://LinkToTextFile.txt");
            if (txtBxAccessKey.Text.Contains(" ") || txtBxAccessKey.Text == string.Empty)
            {
                MessageBox.Show("Empty");
            }
            else if (accessKeys.Contains(txtBxAccessKey.Text)) //This is what I need to change to work as intended
            {
                this.Hide();
                Loader frmLoader = new Loader();
                frmLoader.ShowDialog();
            }
            else
            {
                MessageBox.Show("Access Key Not Found");
            }
  

Комментарии:

1. Покажите несколько примеров неправильного поведения, которое вы описали: «но он найдет любую букву в текстовом файле и будет действовать так, как будто слово находится в файле»

2. @RistoM В текстовом файле у меня есть слова ‘admin’ и ‘test’ в разных строках, если я введу букву ‘a’ в текстовом поле, то загрузка ‘frmLoader’ продолжится

3. @RistoM Значение остается пустым, пока кто-нибудь не введет значение, в этом случае я ввожу букву «a», и оно продолжает показывать «frmLoader», потому что в текстовом файле есть слово, содержащее букву «a»

4. Хорошо, я вижу проблему. Я могу предложить вам какое-нибудь решение в качестве ответа через несколько минут..

5. @RistoM Хорошо, спасибо

Ответ №1:

Вот решение, в котором сравнение выполняется со всем словом в файле (разделенным пробелом).

  1. Загрузите данные файла в виде строки
  2. Разбить строку на массив строк, разделенных любым пробелом (пробел, перевод строки, табуляция)
  3. Проверьте, есть ли txtBxAccessKey.Текст является одним из элементов массива

Пожалуйста, проверьте несколько заметок, которые я сделал в качестве комментариев к коду (правильная обработка ошибок, сравнение без учета регистра). Я также исправил сравнение пустой строки как более элегантное. В этом фрагменте используется Contains -метод, найденный в System.Linq -namespace.

 using System.Linq;

private void btnLogin_Click(object sender, EventArgs e)
{
    WebClient wc = new WebClient();
    var fileContents = wc.DownloadString("http://LinkToTextFile.txt");
    //Todo 1: Error handling, check for empty!
    //Todo 2: Handle case in-sensitive comparison!
    string[] lines = fileContents.Split(null);

    if (string.IsNullOrEmpty(txtBxAccessKey.Text))
    {
        MessageBox.Show("Empty");
        return;
    }
    else if (lines.Contains(txtBxAccessKey.Text))
    {
        this.Hide();
        Loader frmLoader = new Loader();
        frmLoader.ShowDialog();
    }
    else
    {
        MessageBox.Show("Access Key Not Found");
    }
}
  

Комментарии:

1. И последняя проблема, если бы я хотел игнорировать определенные части текстового файла, как бы это было сделано, я попытался добавить //TEXTHERE, но он не игнорирует это, вот ссылка, которую я использую: raw.githubusercontent.com/AnonXCSGO/YawnCheatsLoader/master /…

2. Проще всего, если вы управляете своим массивом строк по отдельному алгоритму, прежде чем проводить сравнение. Попробуйте создать алгоритм для этого и задайте еще один вопрос SO, если возникнет какая-то проблема, связанная с этим. кстати, я немного отредактировал свой ответ (теперь массив содержит все слова в файле, а не только целые строки). Отметьте ответ как принятый, если на ваш первоначальный вопрос получен ответ.