C# C如何在csvline.split(',')之前从逗号分隔的csv文件中的特定行中删除额外的逗号

C# C如何在csvline.split(',')之前从逗号分隔的csv文件中的特定行中删除额外的逗号,c#,parsing,visual-studio-2017,C#,Parsing,Visual Studio 2017,问候语 我以前曾请求过有关解析的帮助,它帮助了我很多。 几天后,我再次需要帮助,找到解决这个问题的合理方法 大声说我正在分析的句子 5/13/2019,"PHONE SERVICE,/GUIA:54 REF:0000000005556 CIE:041",872,, 在这一行->2019年5月13日,电话服务,/GUIA:54 REF:000000000 5556 CIE:041872,迭代Everyline并使用 string currentRow = eachLineToParse; Re

问候语 我以前曾请求过有关解析的帮助,它帮助了我很多。 几天后,我再次需要帮助,找到解决这个问题的合理方法

大声说我正在分析的句子

 5/13/2019,"PHONE SERVICE,/GUIA:54 REF:0000000005556 CIE:041",872,,

在这一行->2019年5月13日,电话服务,/GUIA:54 REF:000000000 5556 CIE:041872,迭代Everyline并使用

string currentRow = eachLineToParse;
Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
String[] rowish = CSVParser.Split(currentRow);

rowish应该返回一个包含值的数组。

在带有额外逗号的行中,包含逗号的值用引号括起来

 5/13/2019,SPEI ENVIADO SANTANDER/03GASOLINA MAYO (3),"1,000.00",,
 5/13/2019,"TELEFONOS DE MEXICO,/GUIA:54 REF:0000000005556 CIE:041",872,,
           ^                                                      ^
这是一种标准的方法,表明引号中的任何内容都是一个值,不应该根据引号中的任何逗号进行拆分

这意味着您需要编写基于逗号的拆分代码,除非它们位于引号内。要做到这一点。。。不要。只需使用现有的库即可为您处理该问题。试试看

首先定义一个类,该类定义每行中包含的数据:

public class Data
{ 
    [Name("D?")]
    public DateTime Date { get; set; }

    [Name("Concepto / Referencia")]
    public string Conceptio { get; set; }

    [Name("cargo")]
    public string Cargo { get; set; }

    [Name("Abono")]
    public string Abono { get; set; }
}
如果属性名称与列标题匹配,则不需要CsvHelper.Configuration.Attributes.NameAttribute,但不能命名属性D?所以我们需要属性

然后读取它的代码如下所示:

public Data[] ReadDate(string fileName)
{
    using (var file = File.OpenText(fileName))
    {
        using (var reader = new CsvReader(file))
        {
            return reader.GetRecords<Data>().ToArray();
        }
    }
}
现在我们已经将CSV数据解析为一个数据数组,我们可以用它做任何我们想做的事情


我甚至没有为报价单添加任何特殊处理,因为这是CsvHelper的默认行为。它不尝试在引号内拆分值。如果需要,您可以指定不同的字符,但在这种情况下,我们都已设置好。

如果需要截图,请至少裁剪它们。对不起,我会记住,如果这有帮助,请编辑您的问题以删除图片和所有额外的代码。我能够实现此建议。非常感谢你的帮助
public Data[] ReadDate(string fileName)
{
    using (var file = File.OpenText(fileName))
    {
        using (var reader = new CsvReader(file))
        {
            return reader.GetRecords<Data>().ToArray();
        }
    }
}