【问题标题】:Is it possible to export to a csv without the value being encapsulated as a string?是否可以在不将值封装为字符串的情况下导出到 csv?
【发布时间】:2014-04-17 11:36:46
【问题描述】:

我希望我的 CSV 看起来像这样:

12345,John Smith,result1,result2,result3

但它变成了这样:

12345,John Smith,"result1,result2,result3"

问题是我不希望结果中出现"

产生这个的 ruby​​ 代码是这样的:

@a = MyObject.find(x)
CSV.generate do |csv|
  csv << @a.id, @a.name, results.collect{|result| presentable(result) }.join(',')

如果我这样做:

results.collect{|result| presentable(result) }.join(',')

它返回:

"result1,result2,result3"

但是我怎样才能让它 "not be a String" 以便可以在不带引号 " 的情况下将其附加到我的 CSV 中?

【问题讨论】:

  • 如果不是字符串,那么它们应该是什么?
  • 您发布的代码应该会失败,并在@a.id, 之后检测到语法错误。

标签: ruby-on-rails ruby csv


【解决方案1】:

通过使用.join(','),您将结果连接成一个字符串。换句话说,您将 3 个元素传递给 CSV,而不是您想要的 5 个。

你需要:

  1. 删除join
  2. 使用 splat 运算符将枚举数(来自 collect)分解为单个元素(否则您将在数组中得到一个数组)。

试试这个:

@a = MyObject.find(x)
CSV.generate do |csv|
  csv << [@a.id, @a.name, *results.collect{ |result| presentable(result) }]
end

【讨论】:

    【解决方案2】:

    除了您的代码将返回unexpected ',', expecting $end 之外,您似乎想要转义" 字符或使用与, 不同的列分隔符。我希望;)

    Iirc Ruby CSV 类支持:col_sep:quote_char 等参数,你应该检查一下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-08
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      相关资源
      最近更新 更多