2011-03-04 168 views
3

我最近创建了一个应用程序,它通过CSV将项目添加到数据库。添加项目后,我意识到很多我的价值有额外的引号(“),这是不需要的,这是搞乱我的订购Excel在CSV导出时添加额外的引号

问题是,当从Excel导出到CSV时,Excel添加额外的引号。我所有的值已经在他们报价,我下面所示的区别:

原始项目:钻电可逆1/2" 6.3A

出口项目:“钻电可逆1/2“”6.3“

注意:CSV导出会添加三(3)个额外的引号(“)。两个在结尾,一个在最初的预期报价之后。

有没有可以更改的设置,或者我可以在Excel文件/列上设置的格式属性?或者,我必须将它们与它一起生活,并在将它们添加到数据库之前删除我的后端代码中的这些引号?

+0

周围的引号是CSV的标准,所以我不担心它们。只要确保你的进口商是包含报价的会计。里面的引用是Excel逃避双引号的方式。有点烦人,我会批准你,但它是标准的一部分。 – chmullig 2011-03-04 22:43:40

+0

*问题是,当从Excel中导出为CSV格式时,Excel会向我已添加引号的所有值添加额外的引号,而不会尝试导入它,您怎么知道这是一个**问题**? – Wolf 2015-03-16 13:06:51

回答

7

这是完全正常。外部引号被添加,因为这是一个字符串。内部报价翻倍以逃避它。例如,你会在SQL查询中看到同样的事情。使用TextFieldParser类可以自动地尝试和真正的框架代码关心这个解析。

3

这就是标准。

CSV文件中的值应该包含引号(否则字段内的逗号和换行符可能会被误解)。

在字段中转义报价的方式是将报价翻番,就像您看到的一样。

我建议你阅读有关basic rules of CSV

CSV是具有场/由逗号字符和记录/通过终止换行符行分隔的列分隔的数据格式。 包含特殊字符(逗号,换行符或双引号)的字段必须用双引号括起来。如果一行包含空字符串的单个条目,则它可能用双引号引起来。 如果某个字段的值包含双引号字符,则通过在其旁边放置另一个双引号字符来转义它。 CSV文件格式不需要特定的字符编码,字节顺序或行终止符格式。

(重点煤矿)

+0

嗯。这只发生在已包含报价的字段中。所以如果我在我的代码中替换“with”,它应该修复问题?或者我将不得不替换“with”?“编辑:等等,我必须在Excel文件中替换它。 – Lando 2011-03-04 22:43:05

+4

@Lando - 使用CSV解析库,让您的生活变得轻松 – Oded 2011-03-04 22:44:05

-1

另一种方法是使用Unicode字符 “双引号”

http://www.fileformat.info/info/unicode/char/2033/index.htm 

在您的Excel数据。要从Excel中导出为UTF-8或UTF-16 .csv文件,您必须提供一个schema.ini以及适当的CharacterSet属性。显然,用于将.csv导入到数据库中的工具也必须能够识别Unicode。

根据DBMS,可以使用更直接的数据传输方式(SELECT/INSERT ... INTO ... IN),从而完全消除.csv。

+0

我可以问问倒票的原因吗? – 2011-03-04 23:47:48

0

您可以尝试从Excel导出为TAB分隔文件。我发现它更容易解析。

0

将所有字符替换为右双引号按字符左双引号。他们看起来很相似,Excel会感到困惑,让文本不变。

0

如果您的最终输出为HTML,此解决方案将仅有所帮助。这是JavaScript的解决方案,因此很明显,你需要在C#或其他任何语言来重做这个你在工作:

base = base.replace(/""/gi, '"'); 
base = base.replace(/'/gi, '''); 

应用此你解析CSV之前。