我最近创建了一个应用程序,它通过CSV将数据库添加到数据库中。添加项目后,我意识到我的很多值都有额外的引号(“),这些都是不需要的,而且这让我的订单搞得一团糟。
问题在于,当从Excel导出到CSV时,Excel会为我的所有值中添加额外引号,这些值已经包含引号。我在下面展示了不同之处:
原始物品:钻电可逆1/2“6.3A
导出项目:“Drill Electric Reversible 1/2”“6.3”
注意:CSV导出会添加三(3)个额外引号(“)。两个在末尾,一个在原始预期报价之后。
我可以更改设置,还是可以在Excel文件/列上设置格式属性?或者我是否必须使用它并在将其添加到数据库之前删除后端代码中的这些引号?
答案 0 :(得分:7)
这是完全正常的。添加外部引号,因为这是一个字符串。内部引用加倍以逃避它。例如,您在SQL查询中看到的同样的事情。使用TextFieldParser类可以自动为您解析此问题并尝试使用真正的框架代码。
答案 1 :(得分:4)
这是标准。
CSV文件中的值应该有引号(否则字段内的逗号和换行符可能会被误解)。
在字段中转义引号的方法是将它加倍,就像你看到的那样。
我建议您阅读basic rules of CSV:
CSV是一种分隔数据格式,其字段/列由逗号字符分隔,记录/行以换行符终止。 包含特殊字符(逗号,换行符或双引号)的字段必须用双引号括起来。如果一行包含单个条目,即空字符串,则可以用双引号括起来。 如果某个字段的值包含双引号字符,则会在其旁边放置另一个双引号字符进行转义。 CSV文件格式不需要特定的字符编码,字节顺序或行终止符格式。< / p>
(强调我的)
答案 2 :(得分:0)
您可以尝试从Excel导出为TAB分隔文件。我觉得解析起来比较容易。
答案 3 :(得分:0)
替换所有字符右双引号按字符左双引号。它们看起来很相似,Excel会混淆并让文本保持不变。
答案 4 :(得分:0)
此解决方案仅在您的结束输出为HTML时才有用。这是javascript解决方案,所以很明显你需要用C#或你正在使用的任何语言重做这个:
base = base.replace(/""/gi, '"');
base = base.replace(/'/gi, ''');
在解析CSV之前应用此项。
答案 5 :(得分:-1)
另一种方法是使用Unicode字符“DOUBLE PRIME”
http://www.fileformat.info/info/unicode/char/2033/index.htm
在Excel数据中。要从Excel导出为UTF-8或UTF-16 .csv,您必须提供具有适当CharacterSet属性的schema.ini。显然,用于将.csv导入数据库的工具也必须支持Unicode。
根据DBMS,可以使用更直接的数据传输方式(SELECT / INSERT ... INTO ... IN),从而完全消除.csv。