从文本框中读取输入值,从文本文件中获取数据并显示结果

时间:2012-08-19 05:29:37

标签: c#

我在搜索文本文件时需要帮助。我已设法使用":"分隔符将输入值存储到Textfile。

我的结果文本框就像

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(':');

请帮助解决

感谢您的时间

3 个答案:

答案 0 :(得分:1)

删除行sr.ReadToEnd();

答案 1 :(得分: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();
            }
        }
    }

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

答案 2 :(得分:0)

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

获取一个名为temp的字符串变量,并在while循环中将line的值赋给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;
        }
    }