4

我想让 CSV::Writer 在带引号的字符串中生成换行符:

A,B,"Line
Line",C 

这样该行将在 Excel 中显示为:

A,B,Line,C
    Line

是否可以防止 CSV:Writer 去除换行符?如果没有,切换到 FasterCSV 会解决这个问题吗?

4

2 回答 2

2

当前的 CSV 模块支持单个单元格中的换行符。

从 IRB 会话:

  require 'csv'
  CSV.open("./testfile.csv", "w") do |csv|
    csv << ["row", "of", "CSV\nCSV", "data"]
  end

切换到 FasterCSV 也可以。从另一个 IRB 会话:

require 'fastercsv'
FasterCSV.open("./testfile.csv", "w") do |csv|
  csv << ["row", "of", "CSV\nCSV", "data"]
end
于 2009-06-05T17:22:47.900 回答
1

如果您将行分隔符设置为默认值以外的其他值(即 \r\n 或 \n),看起来您可以。这是一个示例(查看在调用 CSV.parse_row 时指定的最后一个参数):

require 'csv'

src = "a,test\ntest,b\ra,test\ntest,b,c"
idx = 0
begin
  parsed = []
  parsed_cells, idx = CSV.parse_row(src, idx, parsed, ',', ?\r)
  puts "Parsed #{ parsed_cells } cells."
  p parsed
end while parsed_cells > 0

这是输出:

Parsed 3 cells.
["a", "test\ntest", "b"]
Parsed 4 cells.
["a", "test\ntest", "b", "c"]

希望这可以帮助。

于 2009-11-10T02:16:51.940 回答