Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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#_Csv_Streamreader - Fatal编程技术网

C# 读取CSV文件时忽略双引号之间的逗号

C# 读取CSV文件时忽略双引号之间的逗号,c#,csv,streamreader,C#,Csv,Streamreader,CSV阅读器用c语言制作。它工作正常,但我不能忽略双引号行值之间的逗号“” 例如: aa,aa,bb,cc 它读起来像 Col1 Col2 Col3 Col4 aa aa bb cc 而不是这个,它应该是这样的 Col1 Col2 Col3 aa aabb cc 这是我的代码: public void LoadFile(String path) { Table.Rows.Clear(); Table.Columns.Clear(); Stream

CSV阅读器用c语言制作。它工作正常,但我不能忽略双引号行值之间的逗号“”

例如: aa,aa,bb,cc

它读起来像

Col1 Col2 Col3 Col4
aa   aa   bb   cc 
而不是这个,它应该是这样的

Col1 Col2 Col3 
aa   aabb cc 
这是我的代码:

public void LoadFile(String path)
{
    Table.Rows.Clear();
    Table.Columns.Clear();
    StreamReader file = File.OpenText(path);
    String[] header = file.ReadLine().Split(',');
    for (int i = 0; i < Table.ColumnCount; i++)
    {
        Table.Columns[i].Name = "Col " + i;}
        String row = "";
        while ((row = file.ReadLine()) != null)
        {
            Table.Rows.Add(row.Split(','));
        }
        file.Close();
    }
}

您可以通过使用regex Split函数替换Split函数来解决此问题

Table.Rows.Add(row.Split(','));
应替换为

Table.Rows.AddRegex.Splitrow,?=?:[^\]*\[^\]*\*.[^\]*$

并在顶部添加部件

using System.Text.RegularExpressions;

这将解决您的问题

您可以通过使用regex Split函数替换Split函数来解决此问题

Table.Rows.Add(row.Split(','));
应替换为

Table.Rows.AddRegex.Splitrow,?=?:[^\]*\[^\]*\*.[^\]*$

并在顶部添加部件

using System.Text.RegularExpressions;

这将解决你的问题

你可能想考虑找到一个第三方CVS阅读器,因为大多数人会为你处理这个问题。有很多CSV解析工具,比如CSVHelper,可以为你做所有这些事情,我可以从外部CSV阅读器中获取帮助,但是尝试添加一个条件,这样就可以工作了。我是用流阅读器做的。我正在尝试将其作为一个应用程序来工作。正如您所发现的,它比使用逗号拆分更复杂。如果要重新创建控制盘,可能需要一次读取一个字符,并设置/清除指示是否在dbl引号内的标志。有大量类似的问题等待着你。对于我自己的,非常简单的CSV解析器,我使用了一个状态机。内部的条目状态处理逗号不同于移动到下一个条目状态。你可能想考虑找到一个第三方CVS阅读器,因为大多数人会为你处理这个问题。有很多CSV解析工具,比如CSVHelper,可以为你做这些,我可以从一个外部CSV阅读器中得到帮助。但是试着添加一个条件,这样就可以工作了。我是用流阅读器做的。我正在尝试将其作为一个应用程序来工作。正如您所发现的,它比使用逗号拆分更复杂。如果要重新创建控制盘,可能需要一次读取一个字符,并设置/清除指示是否在dbl引号内的标志。有大量类似的问题等待着你。对于我自己的,非常简单的CSV解析器,我使用了一个状态机。条目状态内部处理逗号的方式不同于移动到下一个条目状态。