【问题标题】:RUBY CSV Gem generating random quotation markRUBY CSV Gem 生成随机引号
【发布时间】:2017-02-17 17:58:10
【问题描述】:

我正在尝试从SQL query result 生成csv 文件。 99% 的时间它都可以正常工作,但在 CSV 文件的某些行(行)中,它确实会在行的开头和结尾生成一个引号。

如图所示的问题:

我已经检查了 SQL 单元格的内容,没有问题。

所以我认为问题发生在生成文件时。

这是生成文件的方式。

#load query result
dataset = DB[ "select
                        id
                       ,action
              from
                        some_table"]

#generate csv file
CSV.open("#{table}.csv", "wb",:write_headers=> true, :headers => ["id_cliente|""acao"] ) do |csv|
      dataset.each do |dbrow|
        csv << [
                "#{dbrow[:id_cliente]}"
                + "|" +
                "#{dbrow[:acao]}"
                ]
        end
end

new_object = $bucket_response.objects.build("#{table}.csv")
new_object.content = open("#{table}.csv")
new_object.acl = :public_read
new_object.save

有没有这样解决或者改进生成过程?

【问题讨论】:

  • 这种情况是否只发生在 Thayane 的线路上?
  • 其实我仔细看了一下,发现它的名字“Thayane”上有一个断线。现在我遇到了一个新问题。
  • 是的,我感觉在 thayane 之后有一个换行符。 csv 将多行字段封装在引号中。并且由于 mdesantis 的回答中提到的问题,算法认为整行是一个字段。
  • @eiko 你是对的。字符串中有一个“char(10)”。现在它工作正常。谢谢。

标签: ruby csv


【解决方案1】:

您必须指定分隔符,而不是将其作为字符串传递:

CSV.open("#{table}.csv", "wb", col_sep: '|', ..., headers: ['id_cliente', 'acao']
    ...
    csv << [dbrow[:id_cliente], dbrow[:acao]]
    ...

有关更多信息,请查看 CSVCSV::Row 文档

【讨论】:

  • 不要做"#{dbrow[:id_cliente]}"。只需dbrow[:id_cliente]
  • @mdesantis 实际上我在字符串中有一个“char(10”),所以它破坏了单元格。无论如何,您的提示提高了文件的速度和大小。谢谢。
猜你喜欢
  • 2012-11-15
  • 2016-09-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
相关资源
最近更新 更多