0

我需要帮助来搜索文本文件。我已经设法将输入值存储到带有":"分隔符的文本文件中。

我的结果文本框就像

friend1:126457890
friend2:123487012
Friend3:798461598

现在我想搜索文本文件并显示结果labels/textbox(read only)

这是我要搜索的代码

 private void btn_search_search_Click(object sender, EventArgs e)
 {
        try
        {
            if (string.IsNullOrEmpty(txt_search.Text))
            {
                lbl_search_error.Text = "Please Enter name to search";
            }
            else
            {
                StreamReader sr = new StreamReader(@"path.txt");

                string line;
                string searchkey = txt_search.Text;
                sr.ReadToEnd();

                while ((line = sr.ReadLine()) != null)
                {

                    if (line.Contains(searchkey))
                        break;
                }
                sr.Close();

                string[] data = line.Split(':');
                txt_result_name.Text = data[0];
                txt_result_phno.Text = data[1];
            }
        }
        catch (Exception ex)
        {
            lbl_search_error.Text = ex.Message;
        }
}

但我明白了

你调用的对象是空的

我试图保持断点和 chk,错误在这一行

string[] data = line.Split(':');

请帮忙解决

感谢您的时间

4

3 回答 3

1

删除行 sr.ReadToEnd();

于 2012-08-19T05:40:20.670 回答
1

让我给你一个使用正则表达式的不同方法:

   private void btn_search_search_Click(object sender, EventArgs e)
    {
        StreamReader sr = new StreamReader("Some file");
        string line = sr.ReadLine();
        string name="";
        string number="";
        while (line != null)
        {
            var m = Regex.Match(line, @"([\w]+):([\d]+)<br>");
            if (m.Success)
            {
                name = m.Groups[1].Value; 
                number = m.Groups[2].Value;   // use this name and number variables as per your need
                line = sr.ReadLine();
            }

            else
            {
                line = sr.ReadLine();
            }
        }
    }

这是解决问题的一种方法。如果您有任何问题,请提出

于 2012-08-19T06:01:54.287 回答
0

您收到此错误是因为 的值linenullstring[] data = line.Split(':');

取一个名为的字符串变量,并在 while 循环中temp分配lineto的值。temp稍后使用此变量代替line. 这样做:

 private void btn_search_search_Click(object sender, EventArgs e)
    {
        try
        {
            if (string.IsNullOrEmpty(txt_search.Text))
            {
                lbl_search_error.Text = "Please Enter name to search";
            }
            else
            {

                StreamReader sr = new StreamReader(@"path.txt");

                string line;
                string searchkey = txt_search.Text;
                sr.ReadToEnd();


                string temp;
                while ((line = sr.ReadLine()) != null)
                {
                   if (line.Contains(searchkey))
                   {
                      temp = line;
                      break;
                   }
                }
                sr.Close();

                string[] data = temp.Split(':');
                txt_result_name.Text = data[0];
                txt_result_phno.Text = data[1];
            }
        }
        catch (Exception ex)
        {
            lbl_search_error.Text = ex.Message;
        }
    }
于 2012-08-19T05:34:41.573 回答