2015-12-07 54 views
0

我生成CSV文件是這樣的:CSV.generate加引號爲字符串

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文件。

任何提示如何擺脫它?

+0

你能告訴我們''和'd.pet'包含什麼?從你給我們的信息來看,'gsub'應該可以工作。 – ndn

+0

部分** [**] **表示包含來自數據庫的數據的變量,CSV文件中有25-30列,所以我只是在這裏縮短它。 – user984621

+1

我們需要查看可以複製此問題的最小代碼。 –

回答

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"""