C# 无法从csv文件中读取值
我正在尝试从csv文件加载个人数据,如果他们在ukNumber文本框中键入“2”,它将从以ID 2开头的文件中获取数据,我有一些问题,因为它将只加载csv文件中的最后一行C# 无法从csv文件中读取值,c#,csv,C#,Csv,我正在尝试从csv文件加载个人数据,如果他们在ukNumber文本框中键入“2”,它将从以ID 2开头的文件中获取数据,我有一些问题,因为它将只加载csv文件中的最后一行 public void search_Click(object sender, EventArgs e) { string answer = ukNumber.Text; string idStr; string firstnameStr; string
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];
}
}
}
更改此行:
richTextBox1.Text = "Name: " + values[1] + "\nSurname: " + values[2] +
"\nJob Role: " + values[3] + "\nSalary: £" + values[4];
到
或者,首先使用StringBuilder构建整个文本,并一次性将其分配给richTextBox1.text
。更改此行:
richTextBox1.Text = "Name: " + values[1] + "\nSurname: " + values[2] +
"\nJob Role: " + values[3] + "\nSalary: £" + values[4];
到
另一方面,首先使用StrugBu建器构建整个文本并将其分配给<代码> RigText Boxx.Text <代码>一行。
< P>如果您在文件的中间,这是:!reader.EndOfStream
将为真
,因此您有:
while (true || answer == idStr) => while (true)
当然,它会在文件的末尾
我想您需要以下支票:
while (!reader.EndOfStream && answer != idStr)
如果你在文件的中间,这是:
!reader.EndOfStream
将为真
,因此您有:
while (true || answer == idStr) => while (true)
当然,它会在文件的末尾
我想您需要以下支票:
while (!reader.EndOfStream && answer != idStr)
为什么不使用:
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.
为什么不使用:
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.
据我所知,您只需要具有指定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文件本身并不像看上去那样简单。最好使用像和这样的库
2) 您的代码未命中错误处理:您可能会得到空的“行”,并非所有的值都是这样设置的(例如,值[4]将抛出超出范围的异常等)。据我所知,您只需要指定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文件本身并不像看上去那样简单。最好使用像和这样的库
2) 您的代码遗漏了错误处理:您可能会得到空的“行”,并不是所有的值都可以这样设置(因此,值[4]例如,将抛出超出范围的异常,等等。您应该附加到richTextBox1.Text。此时覆盖其中的内容。您应该附加到richTextBox1.Text。此时覆盖其中的内容。
File.ReadLines
是一种更好的样式(您不希望在上下文中使用ReadAllLines
)richTextBox1.Text+=
会导致不断的重新绘制和闪烁;在StringBuilder
中收集所有数据,然后(一次!)将收集到的数据分配给richTextBox1
文件。ReadLines是一种更好的样式(您不希望在上下文中使用ReadAllLines
);richTextBox1.Text+=
会导致不断重新绘制和闪烁;在StringBuilder
中收集所有数据,然后(一次!)将收集的数据分配给richTextBox1