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

本文关键字:退出 循环 CSV 为什么 | 更新日期: 2023-09-27 18:08:15

我有一个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行,所以上面的代码正在做的是显示消息框从第一行到最后一行,然后回到显示第一行到最后一行,并继续这样做…在第一次迭代中到达最后一行时,如何退出?

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

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

foreach (string line in lines)

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

你可能想要删除这个foreach循环。

编辑:

你的代码确实退出了while循环,并退出了周围的foreach,但只有在大量无用的迭代之后。

下面是您的代码,伪代码形式:

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

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

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