在我的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!");
}
示例图片
修改
抱歉模棱两可!用户需要输入产品密钥。当您点击提交并且该项目存在于文件中时,它应该在文本框中显示数据。如果没有,会弹出一条消息说该项目不存在。
答案 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
中是明智的,但正确检查是最好的。