CSV.generate为字符串添加引号

时间:2015-12-07 21:48:04

标签: ruby-on-rails ruby string csv

我正在以这种方式生成CSV文件:

csv_address_book = CSV.generate do |csv|
  @users.each do |u|  
    csv << ["Add", 
            nil,
            u.name,
            u.pet,
            nil,
            u.addreess,
            ..] 

它运行良好,但是对于某些字符串是附加引号,所以代替:

A,Cat,123,B

我正在

A,"Cat",123,B

我正试图摆脱这种行为,但到目前为止我正在失败......字符串 Cat 是从数据库加载的,没有引号。 我已尝试手动删除它们,例如

d.pet.gsub('"', '')

但结果是一样的 - 引号仍在最终生成的CSV文件中。

任何提示如何摆脱它?

1 个答案:

答案 0 :(得分:1)

我没有看到使用一些简单的Ruby代码来解析CSV的问题:

require 'csv'

['A','Cat',123,'B'].to_csv # => "A,Cat,123,B\n"

如果我分解了一代,CSV似乎表现得很好:

['a', 'b'].to_csv # => "a,b\n"
['a b'].to_csv # => "a b\n"
['a,b'].to_csv # => "\"a,b\"\n"
['"a b"'].to_csv # => "\"\"\"a b\"\"\"\n"

使用generate和块重新创建代码:

csv_string = CSV.generate do |csv|
  csv << ['A','Cat',123,'B']
  csv << ['a', 'b']
  csv << ['a b']
  csv << ['a,b']
  csv << ['"a b"']
end

csv_string
# => "A,Cat,123,B\na,b\na b\n\"a,b\"\n\"\"\"a b\"\"\"\n"

puts csv_string
# >> A,Cat,123,B
# >> a,b
# >> a b
# >> "a,b"
# >> """a b"""