Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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#_.net_Csv - Fatal编程技术网

C# 分析数据中带有逗号的CSV

C# 分析数据中带有逗号的CSV,c#,.net,csv,C#,.net,Csv,可能重复: 我为自己编写了一个CSV解析器,它工作正常,直到我达到以下记录: B002VECGTG,B002VECGTG,拥有17131个空间射手,“4426”,0.04%,4832%,0.03%,0%,1,0.02%,20.47美元,1 在“4426”和“4426”中,转义的命令阻止了我的解析器 这是我用来解析文本行的内容: char[] comma = { ',' }; string[] words = line.Split(comma);

可能重复:

我为自己编写了一个CSV解析器,它工作正常,直到我达到以下记录:
B002VECGTG,B002VECGTG,拥有17131个空间射手,“4426”,0.04%,4832%,0.03%,0%,1,0.02%,20.47美元,1
在“4426”和“4426”中,转义的命令阻止了我的解析器

这是我用来解析文本行的内容:

            char[] comma = { ',' };
            string[] words = line.Split(comma);

如何防止程序中断?

您不能仅使用逗号拆分。要为这种情况实现适当的解析器,您需要自己循环字符串,跟踪是否在引号内。如果您在一个带引号的字符串中,则应继续,直到找到另一个引号

IEnumerable<string> LineSplitter(string line)
{
    int fieldStart = 0;
    for(int i = 0; i < line.Length; i++)
    {
        if(line[i] == ',')
        {    
            yield return line.SubString(fieldStart, i - fieldStart);
            fieldStart = i + 1;
        }
        if(line[i] == '"')
            for(i++; line[i] != '"'; i++) {}
    }
}
IEnumerable行拆分器(字符串行)
{
int fieldStart=0;
for(int i=0;i