我正在尝试从csv文件加载人员数据,如果他们输入" 2"在ukNumber文本框中,它将带来以ID 2开头的文件中的数据,我有一些问题,因为它只会加载csv文件中的最后一行。
public void search_Click(object sender, EventArgs e)
{
string answer = ukNumber.Text;
string idStr;
string firstnameStr;
string surnameStr;
string jobroleStr;
string salaryStr;
using (var reader = new StreamReader(File.OpenRead("C:\\Users\\hughesa3\\Desktop\\details.csv"),
Encoding.GetEncoding("iso-8859-1")))
{
while (!reader.EndOfStream || answer == idStr)
{
var line = reader.ReadLine();
var values = line.Split(',');
idStr = values[0];
firstnameStr = values[0];
surnameStr = values[0];
jobroleStr = values[0];
salaryStr = values[0];
richTextBox1.Text = "Name: " + values[1] + "\nSurname: " + values[2] + "\nJob Role: " + values[3] + "\nSalary: £" + values[4];
}
}
}
答案 0 :(得分:1)
更改此行:
richTextBox1.Text = "Name: " + values[1] + "\nSurname: " + values[2] +
"\nJob Role: " + values[3] + "\nSalary: £" + values[4];
到
richTextBox1.Text += "Name: " + values[1] + "\nSurname: " + values[2] +
"\nJob Role: " + values[3] + "\nSalary: £" + values[4];
或者,首先使用StringBuilder构建整个文本,然后一次性将其分配给richTextBox1.Text
。
答案 1 :(得分:1)
如果您位于文件中间:
!reader.EndOfStream
将为true
,因此您拥有:
while (true || answer == idStr) => while (true)
当然它会到文件的末尾。
我想你想要以下检查:
while (!reader.EndOfStream && answer != idStr)
答案 2 :(得分:1)
为什么不使用:
string idYouSearched = "2";
var encoding = Encoding.GetEncoding("iso-8859-1");
var csvLines = File.ReadAllLines(fileName,encoding);
foreach (var line in csvLines )
{
var values = line.Split(',');
if(values[0].Contains(idYouSearched))
{
richTextBox1.Text += "Name: " + values[1] +
"\nSurname: " + values[2] +
"\nJob Role: " + values[3] +
"\nSalary: £" + values[4];
}
}
It`s much simpler and you not holding open stream when working with the UI.
答案 3 :(得分:1)
据我所知,您只需要来自具有指定ID的行的值。当你到达正确的ID时,你需要打破你的循环。
while (!reader.EndOfStream )
{
var line = reader.ReadLine();
var values = line.Split(',');
idStr = values[0];
if (answer == idStr) {
richTextBox1.Text = "Name: " + values[1] + "\nSurname: " + values[2] + "\nJob Role: " + values[3] + "\nSalary: £" + values[4];
break;
}
}
附注:
1)读取(或写入)CVS文件本身并不是一个简单的任务,因为它可能会出现。最好使用CsvHelper和A Fast CSV Reader
等库2)你的代码错过了错误处理:你可能会变空"行",并非所有的值都可以设置在这里(因此,值[4],例如,将抛出范围异常等等。