Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么';CSV解析器是否退出循环?_C#_Loops_Csv - Fatal编程技术网

C# 为什么';CSV解析器是否退出循环?

C# 为什么';CSV解析器是否退出循环?,c#,loops,csv,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.SetDelimit

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

以下是伪代码形式的代码:

for each line in the file
  print out every single line in the file
可以理解,这会多次打印文件的每一行,尽管不是无限多次。它将为文件中的每一行打印一次文件中的每一行


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

这是您的伪代码形式的代码:

for each line in the file
  print out every single line in the file
可以理解,这会多次打印文件的每一行,尽管不是无限多次。它将为文件中的每一行打印一次文件中的每一行


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

,因为这是第一行(正如我在评论中所说的):

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

您可能希望删除此
foreach
循环

编辑:


您的代码确实会退出
while
循环,并且确实会退出周围的
foreach
,但只有在经过大量无用的迭代之后。

因为第一行(正如我在评论中所说的):

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

您可能希望删除此
foreach
循环

编辑:


您的代码确实会退出
while
循环,并且确实会退出周围的
foreach
,但只有经过大量无用的迭代之后。

@MarioJVargas这正是
TextFieldParser
的功能。。。它解析CSV数据。
变量中有多少字符串?对于每个字符串,您将读取整个文件,并为其中的每一行显示一个messagebox。对于每个字符串。因此,如果文件中有5行,则表示有5个MessageBox。然后,如果
行中有100个字符串,则表示有5*100个消息框。@MarioJVargas:
TextFieldParser
-类是.NET framework中唯一的“板载”CSV解析器。你真的认为它不起作用吗?我经常使用它(VB.NET和C#)。@SearchForkKnowledge:您意识到您处理CSV的次数与文件中的行号相同吗?@MarioJVargas:无需删除
VisualBasic
命名空间。它只是.NET框架中的一个类,不多不少。在我看来,你们团队的优先级是错误的。@MarioJVargas这正是
TextFieldParser
的含义。。。它解析CSV数据。
变量中有多少字符串?对于每个字符串,您将读取整个文件,并为其中的每一行显示一个messagebox。对于每个字符串。因此,如果文件中有5行,则表示有5个MessageBox。然后,如果
行中有100个字符串,则表示有5*100个消息框。@MarioJVargas:
TextFieldParser
-类是.NET framework中唯一的“板载”CSV解析器。你真的认为它不起作用吗?我经常使用它(VB.NET和C#)。@SearchForkKnowledge:您意识到您处理CSV的次数与文件中的行号相同吗?@MarioJVargas:无需删除
VisualBasic
命名空间。它只是.NET框架中的一个类,不多不少。我认为你们团队的优先顺序是错误的。