制表符分隔或逗号分隔输出中的新行

时间:2010-06-21 22:58:24

标签: text formatting csv standards tsv

我正在寻找一些处理csv和制表符分隔文件的最佳实践。

对于CSV文件,如果值包含逗号或双引号,我已经在进行一些格式化,但如果值包含换行符,该怎么办?我应该保留新行的完整性并将值包含在双引号中+转义值中的任何双引号吗?

制表符分隔文件的相同问题。我假设答案非常相似,如果不相同的话。

3 个答案:

答案 0 :(得分:1)

通常你会保持\n不变,同时利用newline char将被包含在" "字符串中这一事实。这不会产生歧义,但如果你不得不使用普通的texteditor查看文件,这真的很难看。

但是你应该这样做,因为除了双引号本身之外,你不会在CSV中的字符串中转义任何内容。

答案 1 :(得分:0)

@Jack是对的,你最好的选择是保持\n不变,因为如果是这样的话,你会期望它在双引号内。

与大多数事情一样,我认为这里的一致性是关键。据我所知,如果您的值跨越多行,包含逗号或包含双引号,则只需要双引号。在我看到的一些实现中,所有值都被转义和双引号,因为它使解析算法更简单(从不存在转义和双引号的问题,以及读取CSV时的反向)。

这不是最优化的空间解决方案,但是对于您自己的库和将来可能会使用它的其他库,读取和写入文件都是一件微不足道的事情。

答案 2 :(得分:0)

对于TSV,如果要无损表示值,则值得考虑“线性TSV”规范:http://paulfitz.github.io/dataprotocols/linear-tsv/index.html

出于明显的原因,大多数此类约定至少遵守以下规定:

   \n for newline,
   \t for tab,
   \r for carriage return,
   \\ for backslash

某些工具为NUL添加\0