2017-09-14 391 views
0

想确认与csv格式相关的内容。我正在加载文件到数据库中并使用双引号括起来,因为它可能发生在我的csv中,某些字段包含双引号之间的值 - 这是正常的。不过有时我得到文件,其中有局面分离和封闭的是,例如,空格的双引号,这使得一个问题,我的代码被处理之间的为值,例如:分隔符和csv文件中的值之间的空格

1, "value1",something 

在从第二位置这种情况下,值将被插入到数据库:

spacespace"value1" 

我的客户是谁提供的csv声称,它是正常的,我的代码应该把刚刚value1作为值到数据库中。但是从我的理解来看,这是不正确的,因为在这种情况下,空间属于价值,所以封闭的价值并不是应该如此。在这个案例中,我可以参考什么文件来解释客户他所说的是不真实的,并且他应该在这种情况下避免空间,否则它将属于价值。谢谢。

+0

https://en.wikipedia.org/wiki/Comma-separated_values#Specification – melpomene

+0

@melpomene首先我对我写的是什么?在这个链接中找不到任何东西 - 你接受了哪个句子? – DinoDinn

+0

“,记录被划分成由分隔符分隔的字段(通常是单个保留字符,如逗号,分号或制表符; *有时分隔符可能包含可选空格*)”...“,没有附加信息(例如RFC 4180 *仅声明为“CSV”格式的文件未完全指定*“...”在某些CSV实现中,前导和尾部空格以及制表符会被修剪(忽略).RF 4180禁止这样的修剪,其中指出“空间被认为是一个领域的一部分,不应该被忽略。”“ – melpomene

回答

1

csv没有真正的标准。然而,RFC4180列出了一些规则/信息。

对于例如CSV:

1, "value1",something 

这实际上可以看作是无效的CSV数据,因为在实践中,如果有一个分离器和第一双引号之间的空格一些CSV解析器将抛出一个错误。

但是,如果该行被解析,则应删除/跳过"之前的空格。

但以下行,一般的规则是保留空间,因为它们是引号内:

1," value1",something 

当然,最好的选择就是(让你的客户)生成正确的CSV数据开始用。

+0

我同意,如果它在报价中,但如果不是全价值甚至包括报价作为价值部分的价值封闭的部分。 – DinoDinn

+0

@DinoDinn是的,不同的解析器会以不同的方式对待它。这就是为什么它不应该被接受为有效的csv。我会推动客户端提供有效的csv,生成正确的csv要比在读取时修复它更容易(并且可能会在稍后导致更多的问题 - 更新软件/解析器等)。 –

+0

@DinoDinn如果您必须自己修复此问题:您可以修剪左边的空格,但只删除两个外部双引号(不要修剪所有双引号)并用一个双引号替换 - 因为您可以将“监视器17“”“例如。 –

相关问题