【问题标题】:How to see if a TextBox.Text is one of the words in text file如何查看 TextBox.Text 是否是文本文件中的单词之一
【发布时间】:2019-03-23 18:50:45
【问题描述】:

我想查看文本框文本是否是下载的 .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");
            }

【问题讨论】:

  • 显示一些关于您描述的错误行为的示例:“但它会在文本文件中找到任何字母并表现得像文件中的单词一样”
  • @RistoM 在文本文件中,我在不同的行上有“admin”和“test”这两个词,如果我在文本框中键入字母“a”,那么它将继续加载“frmLoader”
  • @RistoM 在有人输入值之前,该值为空,在这种情况下,我键入字母“a”,它继续显示“frmLoader”,因为文本文件中有一个包含字母“的单词”一个'
  • 好的,我看到了问题。我可以在几分钟内为您提供一些解决方案作为答案..
  • @RistoM 好的,谢谢

标签: c# winforms


【解决方案1】:

这里是解决方案,其中与文件中的整个单词(由空格分隔)进行比较。

  1. 以字符串形式下载文件数据
  2. 将字符串拆分为字符串数组,由任何空格(空格、换行符、制表符)分隔
  3. 检查 txtBxAccessKey.Text 是否为数组项之一

请检查我作为代码 cmets 所做的一些注释(正确的错误处理,不区分大小写的比较)。我还纠正了你的空字符串比较更优雅。这个 sn-p 使用在System.Linq-namespace 中找到的Contains-方法。

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

【讨论】:

  • 最后一个问题,如果我想忽略文本文件的某些部分,该怎么做,我尝试添加 //TEXTHERE,但它不会忽略它这是我的链接使用:raw.githubusercontent.com/AnonXCSGO/YawnCheatsLoader/master/…
  • 最简单的方法是在进行比较之前在单独的算法上操作字符串数组。如果出现问题,请尝试为此制定算法并提出另一个 SO 问题。顺便说一句,我稍微编辑了我的答案(现在数组包含文件中的所有单词,而不仅仅是整行)。如果您的初始问题现已得到回答,请将答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2021-02-20
相关资源
最近更新 更多