我正在寻找一些处理csv和制表符分隔文件的最佳实践。
对于CSV文件,如果值包含逗号或双引号,我已经在进行一些格式化,但如果值包含换行符,该怎么办?我应该保留新行的完整性并将值包含在双引号中+转义值中的任何双引号吗?
制表符分隔文件的相同问题。我假设答案非常相似,如果不相同的话。
答案 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
。