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();
}
}
}