我正在以这种方式生成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文件中。
任何提示如何摆脱它?
答案 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"""