250

是否有任何官方方法允许 CSV 格式的文件允许评论,无论是在自己的行上还是在行尾?

我尝试检查wikipediaRFC 4180,但两者都没有提到任何让我相信它不是文件格式的一部分的东西,所以这对我来说很糟糕,然后我应该使用单独的 ReadMe.txt 文件来解释文件。

最后,我知道添加自己的评论对我来说很容易,但我希望 Excel 之类的东西可以直接导入它,而无需消费者自定义导入过程。

那么,想法?

4

8 回答 8

145

CSV“标准”(例如它)并没有规定应如何处理评论,不,由应用程序建立约定并坚持下去。

于 2009-12-25T11:27:52.590 回答
44

在工程数据中,通常会#在第一列中看到用于表示注释的符号。

我使用用于 Java 的ostermiller CSV 解析库来读取和处理此类文件。该库允许您设置注释字符。解析操作后,您会得到一个仅包含真实数据的数组,没有注释。

于 2013-01-20T19:47:01.297 回答
32

不,CSV 没有指定任何标记注释的方式——它们只会被 Excel 等程序加载为包含文本的附加单元格。

您可以管理的最接近的方法(将 CSV 导入特定的应用程序,例如 Excel)是定义一种特殊的标记注释的方式,Excel 将忽略该方式。对于 Excel,您可以通过将注释嵌入到公式中来“隐藏”注释(在有限程度上)。例如,尝试将以下 csv 文件导入 Excel:

=N("This is a comment and will appear as a simple zero value in excel")
John, Doe, 24

您仍然会在电子表格中看到一个显示数字 0 的单元格,但注释是隐藏的。

或者,您可以通过简单地用空格填充文本来隐藏文本,这样它就不会显示在单元格的可见部分中:

                              This is a sort-of hidden comment!,
John, Doe, 24

请注意,您需要在注释文本后面加上逗号,以便 Excel 填充以下单元格,从而隐藏不适合该单元格的文本的任何部分。

讨厌的 hack,仅适用于 Excel,但它们可能足以使您的输出在导入后看起来更整洁。

于 2009-12-25T12:26:53.300 回答
8

我认为向 CSV 文件添加评论的最佳方法是添加“评论”字段或直接记录到数据中。

我使用的大多数 CSV 解析应用程序都实现了字段映射和记录选择。因此,要评论字段的属性,请添加仅用于字段描述的记录。要对记录进行评论,请在其末尾添加一个字段(实际上是所有记录)仅用于评论。

这是我能想到的评论 CSV 文件的唯一两个原因。但我能预见的唯一问题是,如果任何一条记录未通过某些验证规则,程序将根本拒绝接受该文件。在这种情况下,您将很难为任何数字字段编写字符串类型的字段描述记录。

不过,我绝不是专家,所以请随时指出我理论中的任何错误。

于 2012-06-02T07:18:33.697 回答
5

逗号分隔文件实际上只是一个文本文件,其中的行由逗号分隔的值组成。

没有定义 CSV 文件内容的标准,因此没有明确的方式来表示注释。这取决于将导入 CSV 文件的程序。

当然,这通常是 Excel。您应该问自己 Excel 是如何定义注释的?换句话说,什么会使 Excel 忽略 CSV 文件中的一行(或一行的一部分)?我不知道有什么会这样做。

于 2009-12-25T11:30:06.727 回答
5

如果你需要类似的东西:

  │ A                              │ B
──┼────────────────────────────────┼───
1 │ #My comment, something else    │
2 │ 1                              │ 2

您的 CSV 可能包含以下几行:

"#My comment, something else"
1,2

密切注意第一行的“引号”。

使用 Excel 向导将文本转换为列时,请记住选中“将连续分隔符视为一个”,将其设置为使用“引号”作为分隔符。

因此,Excel 将在逗号处拆分文本,将“注释”行保留为单列值(并将删除引号)。

于 2012-07-05T14:50:33.850 回答
4

如果您在批处理文件中使用 FOR 命令解析文件,则分号有效 (;)

REM test.bat contents

for /F "tokens=1-3 delims=," %%a in (test.csv) do @Echo %%a, %%b, %%c

;test.csv contents (this line is a comment)

;1,ignore this line,no it shouldn't

2,parse this line,yes it should!

;3,ignore this line,no it shouldn't

4,parse this line,yes it should!

输出:

2, parse this line, yes it should!

4, parse this line, yes it should!
于 2016-03-03T17:15:05.517 回答
1

CSV 的设计初衷是没有评论。我经常在 EXCEL 中将评论作为单独的列进行。从我的嵌入式程序中转储数据时,当我(例如)确实需要两个数据列时,通过添加额外的逗号,我为注释创建了一个额外的(第三个)列,如下所示:

27,120,,
28,112,,
29,208,This is my comment,
30,85,,
于 2021-08-20T16:11:17.847 回答