是否有任何官方方法允许CSV格式的文件允许注释,无论是在它自己的行上还是在一行的末尾?
我试着在维基百科上查过这个,也查过RFC 4180,但两者都没有提到任何东西,这让我相信它不是文件格式的一部分,所以这对我来说是坏运气,我应该用一个单独的ReadMe.txt文件来解释这个文件。
最后,我知道添加我自己的注释对我来说很容易,但我希望像Excel这样的东西可以直接导入它,而不需要消费者必须自定义导入过程。
所以,想法?
是否有任何官方方法允许CSV格式的文件允许注释,无论是在它自己的行上还是在一行的末尾?
我试着在维基百科上查过这个,也查过RFC 4180,但两者都没有提到任何东西,这让我相信它不是文件格式的一部分,所以这对我来说是坏运气,我应该用一个单独的ReadMe.txt文件来解释这个文件。
最后,我知道添加我自己的注释对我来说很容易,但我希望像Excel这样的东西可以直接导入它,而不需要消费者必须自定义导入过程。
所以,想法?
逗号分隔文件实际上只是一个文本文件,其中行由逗号分隔的值组成。
没有标准来定义CSV文件的内容,因此也没有明确的方法来指示注释。这取决于将要导入CSV文件的程序。
当然,这通常是Excel。你应该问问自己Excel是如何定义注释的?换句话说,什么会使Excel忽略CSV文件中的一行(或一行的一部分)?我不知道有什么能做到这一点。
不,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填充下面的单元格,从而隐藏不适合该单元格的文本的任何部分。
讨厌的黑客,这只适用于Excel,但它们可能足以使你的输出在导入后看起来更整洁一些。
我认为向CSV文件添加注释的最好方法是添加“comments”字段或直接记录到数据中。
我使用过的大多数csv解析应用程序都实现了字段映射和记录选择。因此,要对字段的属性进行注释,只需为字段描述添加一条记录。要注释一条记录,在它的末尾添加一个字段(好吧,实际上是所有记录),只用于注释。
这是我能想到的对CSV文件进行注释的唯一两个原因。但我能预见的唯一问题是,如果任何一条记录没有通过某些验证规则,程序就根本拒绝接受文件。在这种情况下,为任何数字字段编写字符串类型的字段描述记录都会遇到麻烦。
不过,我绝不是专家,所以请随意指出我理论中的任何错误。
如果你需要这样的东西:
│ A │ B
──┼────────────────────────────────┼───
1 │ #My comment, something else │
2 │ 1 │ 2
您的CSV可能包含以下行:
"#My comment, something else"
1,2
请密切注意第一行中的引号。
当使用Excel向导将文本转换为列时,记得勾选“将连续分隔符视为一个”,将其设置为使用“引号”作为分隔符。
因此,Excel将以逗号分隔文本,保持“comment”行为单列值(并将删除引号)。
在工程数据中,通常会在第一列中看到#符号,用于表示注释。
我使用ostermiller CSV解析库来读取和处理这些文件。该库允许您设置注释字符。在解析操作之后,您将得到一个仅包含真实数据的数组,没有注释。
如果您在批处理文件中使用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!
CSV不是为包含注释而设计的。我经常在EXCEL中单独列注释。当从我的嵌入式程序中转储数据时,当我(例如)确实需要两个数据列时,通过添加额外的逗号,我创建了一个额外的(第三)列,就像这样:
27,120,,
28,112,,
29,208,This is my comment,
30,85,,