即使项目不存在,程序也会显示文本文件数据c#

时间:2017-10-11 10:42:48

标签: c# winforms

在我的previously asked question中,我试图显示文本文件中的特定行以显示到文本框中。

我尝试了建议的解决方案Jeremy Thompson,甚至是pinkfloydx33建议的重构解决方案(这是我坚持的),是的,这两个解决方案对我有效,但我发现程序显示数据即使该字符串在文件中不存在。

例如。如果我输入以下任何内容:1,01,001,2,02,002,它将继续执行代码并显示数据。任何人都可以告诉我如何解决这个问题?我试图通过限制他们的输入来解决这个问题(例如他们必须输入4位数,不多也不少)但我的问题是原始键有不同的长度所以我不能应用这种方法。

示例数据

  

项目密钥,添加日期,产品名称,品牌,类型

     

0001,10 / 08 / 2017,5s,苹果,电话

     

0002,10 / 08/2017,S5,三星,电话

CODE SNIPPET

string plist = @"sample_data.txt";

var line = File.ReadLines(plist).FirstOrDefault(l => l.Contains(txt_ik.Text));
if (line != null)
{
    string[] parts = line.Split(',');
    txt_data1.Text = parts[2];
    txt_data2.Text = parts[3];
    txt_data3.Text = parts[4];
    MessageBox.Show("It exists!");
}
else
{
    MessageBox.Show("Does not exist!");
}

示例图片

修改

抱歉模棱两可!用户需要输入产品密钥。当您点击提交并且该项目存在于文件中时,它应该在文本框中显示数据。如果没有,会弹出一条消息说该项目不存在。

2 个答案:

答案 0 :(得分:1)

如果搜索文本存在于该行的任何位置,则

Contains会返回true。 如果您更改此行:

var line = File.ReadLines(plist).FirstOrDefault(l => l.Contains(txt_ik.Text));

var line = File.ReadLines(plist).FirstOrDefault(l => l.StartsWith(String.Format("{0},", txt_ik.Text)));

确保item-key等于搜索项。

使用String.Format("{0},", txt_ik.Text)我们还会在搜索文本中添加逗号。
然后你确定第一项等于搜索文本。

答案 1 :(得分:0)

那么你需要一个不同的Linq。试试这个:

var item = sa.FirstOrDefault(x => Convert.ToInt32(x.Split(',')[0]).Equals(Convert.ToInt32(txt_ik.Text)));
if (item != null)
{
}

请注意,虽然这样更可靠,但它也更危险,所以至少将它包装在try-catch中是明智的,但正确检查是最好的。