什么时候CSV记录*不*具有相同数量的字段?

时间:2012-03-12 23:23:28

标签: csv

我将一系列事件存储到CSV文件中,每个事件类型都附带不同的数据集

为了说明,我说有两个事件(还会有更多):

  1. 正在运行,其中包含 speed 倾斜的数据集。
  2. 睡觉,其中包含打鼾的数据集。
  3. 有两种方法可以将这些数据存储在CSV记录中:

    选项A

    将每个可能的数据项存储在自己的字段中......

    speed, incline, snores
    

    因此...

    15mph, 20%, ,
    , , 12
    16mph, 20%, ,
    14mph, 20%, ,
    

    选项B

    将每个事件存储在自己的记录中......

    event, value1...
    

    因此...

    running, 15mph, 20%
    sleeping, 12
    running, 16mph, 20%
    running, 14mph, 20%
    

    如果没有特定的CSV规范,consensus似乎是:

      

    每条记录“应该”包含相同数量的逗号分隔字段。

    上下文

    • 有很多活动,每个都有一个大的&不同的数据值集。
    • CSV数据对其他开发者有用(我会/可能/应该/不会使用任何一种结构)。
    • “其他开发人员”将面向频谱的新手端和/或使用资源有限的系统。可以访问CSV。
    • CSV格式非独占提供,因为功能不是必需的。虽然,如果所述应用程序提供CSV文件,则应该从现在开始以正确的方式提供。

    问题

    在这种情况下,使用选项B会有效吗?

    思想

    选项B保持人类可读性水平,这是一个优势,即人类而不是处理器读取CSV。使用自定义解析器解析这两种方法都不是更复杂,但是选项B会使CSV格式与其他库,框架,应用程序等的有用性无效。使用选项A未来对单个事件的数据集的更改/版本可能会破坏CSV结构(僵尸, ,以保持向前兼容性);而选项B将优雅地失败。

    修改

    这可能针对学生和框架,如OpenFrameworks,Plask,Proccessing等。其中CSV 更容易实现。

3 个答案:

答案 0 :(得分:1)

正如您所说,内容方面没有“CSV标准”。真正的答案取决于你在做什么以及为什么。你提到“其他框架,库和应用程序”。我学到的一件事是“不要过度工程”。即使你明天将其插入其他框架,今天不要编写大量的代码。

我会说选项B很好,除非你有特殊要求使用其他应用程序等。

<编辑>

重新阅读你的上下文后,我可能会选择一种输出格式并使用它,而忘记了多种格式:

  • 具有多种输出格式是不一致的来源(例如,一种格式的错误,而不是另一种格式的错误)。
  • 拥有多种格式意味着需要更多代码
    • 测试
    • 记录
    • 支持的

< / edit>

答案 1 :(得分:1)

我曾经使用的任何“其他框架,库和应用程序”都以不同的方式处理CSV解析,因此尝试符合这些标准中的一个或多个可能会使最终结果过于复杂。我的建议是保持简单并使用适合您特定任务的内容。如果要求人类可读性,则选项B形式的CSV可以正常工作。否则,您可能需要考虑JSON或XML。

答案 2 :(得分:0)

你有什么理由不能使用XML吗?是的,解析起来稍微困难一点,至少对新手而言,但如果是这样,他们可能需要练习。当然,文件大小会更大,但它是可压缩的。