#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:
Вот решение, в котором сравнение выполняется со всем словом в файле (разделенным пробелом).
- Загрузите данные файла в виде строки
- Разбить строку на массив строк, разделенных любым пробелом (пробел, перевод строки, табуляция)
- Проверьте, есть ли 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, если возникнет какая-то проблема, связанная с этим. кстати, я немного отредактировал свой ответ (теперь массив содержит все слова в файле, а не только целые строки). Отметьте ответ как принятый, если на ваш первоначальный вопрос получен ответ.