我知道这会误用CSV格式。我确实理解更合适的解决方案是导出xls
/ xlsx
文件,或者为用户提供OData端点,让他们使用power pivot来检索数据。目前我想坚持使用CSV,因为它更容易实现。
我需要将行的平面列表(报告)导出为CSV文件。同时我想要包含一些有关数据的元数据。例如。报告标题,生成日期和用户。
有没有一种巧妙的方法可以使用CSV文件格式来实现这两个目标?
此文件的意图用法是允许用户在Excel中打开文件并进行数据处理。
一种解决方案是将CSV分为两部分:元和数据。 E.g。
Title,Report Generation Date,Generated by User,,
Outstanding Jobs,5/5/2015,bkent@compusa.com,,
,,,,
Job Started, Estimated Completion, Description, Foo, Bar
9/3/2003,1/1/2006,"do something important""""",5,7
5/4/2007,2/2/2010,"do something else""""",3,12
或许有一个"标准"为此目的扩展为CSV格式?
此方法是否存在实用问题?
答案 0 :(得分:1)
CSV没有允许存储元数据的标准扩展名。
您当然可以在文件中有一个单独的部分用于元数据,但由于CSV解析器必须处理单独的标题等,这往往会使处理变得复杂。标准的CSV解析器不会为您执行此操作。
考虑是否可以使用命名约定将元数据存储在单独的文件中,例如
MyData123.csv
MyData123-Meta.csv
您可以将它们捆绑到Zip存档中以将它们保持在一起,直到它们准备好进行处理。
答案 1 :(得分:1)
当我想在csv文件中添加一些元数据时,我最终将它作为json字符串存储为最后一列标题的一部分。
timestamp;x;y;z;heading#{"id": "-L4uNnjWXL2cLY_xpU_s"}
89318.329;0.00541;-0.00548;-0.00219;-1.0
89318.339;0.00998;0.0063;-0.00328;-1.0
89318.349;0.0043;0.01318;0.00069;-1.0
89318.359;0.00477;0.0138;0.0007;-1.0
与OP的建议相比,这种优势在于它是一个有效的csv文件,就所有行具有相同数量的列而言,每列只包含一种类型的数据。知道格式的解析器可以在#
拆分标头并解析json元数据。不知道格式的解析器只会显示带有元数据的最后一列的标题。
答案 2 :(得分:0)
我最近遇到了这个问题,并找到了一个对我有用的“解决方案”。
我们的想法是将元数据编码在csv的第一行和/或最后一行中的单个单元格中,编码为json。
在你的程序中,你可以使用一堆装饰层来支持它:
我个人用PHP做过这个,但也应该可以在其他语言/环境中使用。
为什么要在文件末尾而不是从头开始存储一些元数据?
典型的例子是总行数,只有在完全写入文件的其余部分后才能知道。
事实上,到目前为止,这是我使用此解决方案的唯一用例。我将这些文件命名为* .ncsv,表示最后一行包含行计数。但是,如果我们接受具有不同细胞计数的行,这仍然是技术上有效的csv。
当然无论你在这里做什么,处理这个文件的每一段代码都需要知道你提出的特殊格式。
答案 3 :(得分:0)
有一个 W3C recommendation for how to do this。
这是一个示例:(示例 21:包含嵌入元数据的制表符分隔文件)
# publisher City of Palo Alto
# updated 12/31/2010
#name GID on_street species trim_cycle inventory_date
#datatype string string string string date:M/D/YYYY
GID On Street Species Trim Cycle Inventory Date
1 ADDISON AV Celtis australis Large Tree Routine Prune 10/18/2010
2 EMERSON ST Liquidambar styraciflua Large Tree Routine Prune 6/2/2010