C# 无法从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

我正在尝试从csv文件加载个人数据,如果他们在ukNumber文本框中键入“2”,它将从以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];
            }
        }
    }
更改此行:

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