我有一个问题,真的是这个问题,所以我试着举个例子:
以下代码可以工作并创建预期的输出:分隔文件,其中每列由“真实”选项卡分隔。
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'
?
答案 0 :(得分:7)
请点击它并完成它。
CSV.open(@targetfile, "wb", @targetdelimiter.gsub('\t',"\t")){ |csv|
csv << ["row", "of", "CSV", "data"] }
答案 1 :(得分:1)
\t
用作分隔符时,
0x09
将替换为实际制表符(ASCII Char(9)
或\
)。在第二个中,它没有被替换,它被用作文字字符序列t
和TAB
。如果您没有用户存储转义序列,您可能会有运气,而是使用NEWLINE
或{{1}}之类的东西,然后您可以从数据库中读取并转换为正确的字符(或者你可以将它们从文字转换为正确的字符。)