如何区分excel单元格中的逗号和CSV中的逗号

我的应用程序的数据通常在Excel中准备,然后将其保存为CSV,并在我的应用程序中读取。 我目前使用本指南导入我的CSV文件并将其转换为对象数据。

出于某种原因,excel能够区分每个单元格中包含的逗号与分隔单元格的逗号之间的区别,但是当我使用CSV阅读器(将它拆分为“,”)时,无法区分这两个单元格。

使用C#,有什么方法可以告诉哪个是一个实际的逗号与哪个是CSV文件中的新单元格?

下面是一个在Excel中的示例。 它被保存为“CSV逗号分隔”,在Excel中打开没有问题,但将Column3分隔为“Some”和“thing”,认为它是2个独立的列。

在这里输入图像说明

看看RFC 4180 https://tools.ietf.org/html/rfc4180这是一个相当常见的CSV文件的标准,生成的Excel文件将符合这一点(我听说有一个例外与标题失踪,但还没有碰到这个)。 注意:虽然Excel可以和4180很好的工作,但是SSIS并没有遵循它(尽pipe可以正常阅读),还有其他的例外。

如果Excel中包含逗号,Excel将创build带有引号(“)的CSVlogging,因此parsing器需要将引号中的所有内容作为数据而不是字段分隔符。

通过右键单击文件并select编辑,您可以轻松查看在Excel中创build的CSV应该在记事本中打开。

示例logging(来自地址validation应用程序):

 aa001,1 Devon Court Nar Nar Goon Vic 3823 Australia aa002,"471 Princes Drive, Sale Vic 3916 Australia" aa001 - Excel puts no quotes around field, as doen't contain comma aa002 - Excel puts quotes around field as it contains comma 

我不知道在C#中的任何parsing器,几年前看起来放弃了,并有一个基于rfc4180(我没有代码)的程序员生成。

Apache有一个Javaparsing器,你可以从https://commons.apache.org/proper/commons-csv/download_csv.cgi下载源代码来查看。