tab-delimiter来自数据库时如何编写制表符分隔文件?

时间:2011-05-02 20:34:52

标签: ruby csv tab-delimited

我有一个问题,真的是这个问题,所以我试着举个例子:

以下代码可以工作并创建预期的输出:分隔文件,其中每列由“真实”选项卡分隔。

CSV.open(@targetfile, "wb", "\t") { |csv| 
csv << ["row", "of", "CSV", " }

以下代码不会产生预期的输出。

CSV.open(@targetfile, "wb", @targetdelimiter) { |csv| 
csv << ["row", "of", "CSV", "data"] }
在这种情况下,

@targetdelimiter来自数据库,实际上是可由用户配置的字符串'\t'(不带引号)。

此代码还会生成分隔输出,但我可以看到'\t'而不是“真实”制表符。

我可以用第二个代码块来获得与第一个代码块相同的结果,假设来自db的@targetdelimiter='\t'

2 个答案:

答案 0 :(得分:7)

请点击它并完成它。

CSV.open(@targetfile, "wb", @targetdelimiter.gsub('\t',"\t")){ |csv| 
csv << ["row", "of", "CSV", "data"] }

答案 1 :(得分:1)

在第一个示例中将

\t用作分隔符时,

0x09将替换为实际制表符(ASCII Char(9)\)。在第二个中,它没有被替换,它被用作文字字符序列tTAB。如果您没有用户存储转义序列,您可能会有运气,而是使用NEWLINE或{{1}}之类的东西,然后您可以从数据库中读取并转换为正确的字符(或者你可以将它们从文字转换为正确的字符。)