为什么CSV解析器不退出循环?

时间:2014-06-10 20:14:27

标签: c# loops csv

我有一个foreach语句,它遍历CSV文件并显示数组中的字段:

foreach (string line in lines)
{
    //MessageBox.Show(line);
    using (TextFieldParser parser = new TextFieldParser(textBox1.Text))
    {
        parser.TextFieldType = FieldType.Delimited;
        parser.SetDelimiters(",");
        while (!parser.EndOfData)
        {
            string[] fields = parser.ReadFields();
            foreach (string field in fields)
            {
                colArray.Add(field);
            }
            MessageBox.Show(string.Join(",", colArray));
            colArray.Clear();
        }
    }
}

我的CSV有5行,所以上面代码正在做的是显示从第一行到最后一行的消息框,然后返回显示第一行到最后一行并继续执行...如何在第一次迭代时到达最后一行时退出吗?

2 个答案:

答案 0 :(得分:2)

这是您的代码,采用伪代码形式:

for each line in the file
  print out every single line in the file

这可以理解地打印出文件的每一行不止一次,尽管不是无限次。它将为文件中的每一行打印出文件中的每一行。

要打印出文件中的每一行,请删除外部foreach

答案 1 :(得分:2)

由于这第一行(正如我在评论中所说):

foreach (string line in lines)

您将在CSV中每行执行一次完整的CSV处理(显示每行的每个字段)。

您可能希望删除此foreach循环。

编辑:

您的代码 退出while循环,并退出周围的foreach,但仅在经过大量无用的迭代之后。