2017-02-17 38 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