2013-03-09 41 views
2
require 'csv' 
s = "\"Hello World\"" 

CSV.open('output.txt', 'w') do |csv| 
    csv << [s] 
end 

在我的文件,我得到:红宝石CSV - 尝试换用双引号输出,让 “” “Hello World” 的 “” 而不是 “Hello World” 的

"""Hello World""" 

什么用额外的引号,以及什么是正确的方法来做到这一点?我不希望所有的字段都包含引号,只是一些。使用红宝石1.9.3p194

+0

,没有把努力做屏幕捕捉,但它为我工作 – aug2uag 2013-03-09 07:51:46

+0

如果你输出到一个.txt文件,或者在文本编辑器中打开.csv,它将会有不正确的输出。我不确定为什么在电子表格应用中打开.csv显示正确的内容。我也可以通过Excel获得正确的输出结果。 – Dan 2013-03-09 07:54:57

回答

5

这是正确的。 Quote characters are escaped in CSV files by doubling。包含逗号,换行符和/或引号字符的所有字段都需要用引号引起来。

因此,第一个报价开始引用字段,第二个和第三个报价编码实际引用字符。

Excel screenshot

在开放式办公室我让你要寻找的格式变成

Hello,"Field, with comma","2"" by 4""",123 
+0

我明白了。有没有办法改变这种行为?在我的实际项目中,我试图输出管道分隔的.txt文件,并且我需要将某些描述性字段包装在仅由目标应用程序接受的一组双端口中。它的LEDES法律发票格式。 – Dan 2013-03-09 08:20:08

+1

@codeself:好的,但是你不能使用'csv',因为那不再是CSV文件。只需通过'|'加入字符串,并在之前手动将描述性字段用引号括起来。 – 2013-03-09 08:34:29