2017-02-17 69 views
0

我试图从SQL query result生成csv文件。 99%的时间内,它可以正常工作,但在CSV文件的某些行(行)中,它确实会在行的开始和结尾处生成一个引号。RUBY CSV宝石生成随机引号

合照问题: enter image description here

我已经检查了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 

有没有反正这样解决或改善生成过程?

+0

这是否仅适用于具有Thayane线发生的呢? – eiko

+0

其实我仔细看了一下,我看到它的名字“Thayane”上有一条断线。 现在我遇到了一个新问题。 –

+0

是的,我有一种感觉,thayane后有一个换行符。 csv在引号中封装多行字段。并且由于mdesantis的回答中提到的问题,该算法认为整行是单个字段。 – eiko

回答

1

您必须改为指定分隔符把它当作一个字符串:

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

欲了解更多相关信息查询CSVCSV::Row文档

+2

不要做'“#{dbrow [:id_cliente]}”'。只要做'dbrow [:id_cliente]'。 –

+0

@mdesantis其实我在字符串里有一个“char(10”),所以它打破了单元格。 无论如何,你的提示提高了文件的速度和大小。 谢谢。 –

+0

不客气。 – mdesantis