【问题标题】:Spaces between separator and value in csv filecsv文件中分隔符和值之间的空格
【发布时间】:2017-09-14 21:59:25
【问题描述】:

想确认一些与 csv 格式相关的内容。我正在将文件加载到数据库中并使用双引号括起来,因为在我的 csv 中可能会发生某些字段包含双引号之间的值 - 这是正常的。但是,有时我会得到一些文件,其中分隔符和双引号之间的情况是由例如空格引起的,这对我的将其视为值的代码造成了问题,例如:

1,   "value1",something

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

spacespace"value1"

提供 csv 的客户声称这是正常的,我的代码应该将 value1 作为值放入数据库。但是,据我了解,这是不正确的,因为在这种情况下,空间属于价值,因此被包围并不能正常工作。我对此是否正确,在这个特殊案例中我可以参考什么文件来向客户解释他所说的不是真的,在这种情况下他应该避免空格,否则它将属于价值。谢谢。

【问题讨论】:

  • @melpomene 首先我写的对吗?在此链接中找不到任何相关信息 - 您提到了什么句子?
  • “将记录划分为由分隔符分隔的字段(通常为单个保留字符,例如逗号、分号或制表符;有时分隔符可能包含可选空格)”。 ..“没有其他信息(例如是否遵守 RFC 4180),声称只是“CSV”格式的文件没有完全指定”...“在某些 CSV 实现中,前导和尾随空格和制表符被修剪(忽略)。RFC 4180 禁止此类修剪,其中指出“空格被视为字段的一部分,不应被忽略。”
  • @melpomene 的意思是我写的内容是正确的:“空格被认为是字段的一部分,不应被忽略。”但是,当我将其展示给客户时,他可以说-您知道,但是有“应该”一词,因此没有义务...

标签: csv


【解决方案1】:

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

至于示例csv:

1,   "value1",something

这实际上可以被视为无效的 csv 数据,因为在实践中,如果分隔符和第一个双引号之间有空格,某些 csv 解析器会抛出错误。

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

但对于下一行,一般规则是保留空格,因为它们在引号内:

1,"   value1",something

当然,最好的选择是(让您的客户)从生成正确的 csv 数据开始。

【讨论】:

  • 我同意如果它在报价范围内,但如果不是全部价值作为价值交易,即使包括报价作为价值部分而不是封闭部分。
  • @DinoDinn 是的,不同的解析器会以不同的方式处理这个问题。这就是为什么它不应该被接受为有效的 csv。我会推动客户端提供有效的 csv,生成正确的 csv 比在阅读时修复它要容易得多(并且以后可能会导致额外的问题 - 软件/解析器等的更新......)。
  • @DinoDinn 如果您必须自己解决此问题:您可以修剪左边的空格,但只删除两个外部双引号(不要修剪所有双引号)并将 2 个双引号替换为一个-- 因为你可以有 "monitor 17""" 例如。
  • 你说:“这就是为什么它不应该被接受为有效的 csv”但是我可以参考哪些文件来确认?
  • @DinoDinn 1) 实际上并没有关于此的文档/标准,但您的数据库解析器保留空格这一事实可能是最好的证明/论据。 2)一些链接:Implementation note: In Excel, leading spaces between the comma.. - That cell is invalid - github.com/JoshClose/CsvHelper/issues/204
猜你喜欢
  • 1970-01-01
  • 2018-11-20
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
  • 2015-08-09
相关资源
最近更新 更多