我在搜索文本文件时需要帮助。我已设法使用":"
分隔符将输入值存储到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(':');
请帮助解决
感谢您的时间
答案 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
的值为null
:string[] 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;
}
}