【问题标题】:CSV.generate adds quotation marks to stringsCSV.generate 为字符串添加引号
【发布时间】:2015-12-07 21:48:04
【问题描述】:

我正在以这种方式生成 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文件中。

任何提示如何摆脱它?

【问题讨论】:

  • 您能告诉我们[...]d.pet 包含什么吗?根据您提供给我们的信息,gsub 应该可以工作。
  • [...]部分代表包含来自数据库的数据的变量,CSV文件中大约有25-30列,所以我在这里缩短它。
  • 我们需要查看可以复制此问题的最少代码。

标签: ruby-on-rails ruby string csv


【解决方案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"""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多