[英]When CSV.generate, generate empty field without “”
Ruby 2.2、Ruby on Rails 4.2
我正在 Ruby on Rails 中生成一些 CSV 數據,並希望空字段為空,例如,,
而不是,"",
。 我寫了如下代碼:
somethings_cotroller.rb
def get_data
respond_to do |format|
format.html
format.csv do
@data = SheetRepository.accounts_data
send_data render_to_string, type: :csv
end
end
end
東西/get_data.csv.ruby
require 'csv'
csv_str = CSV.generate do |csv|
csv << [1,260,37335,'','','','','','']
...
end
這會生成這樣的 CSV 文件。
獲取數據.csv
1,260,37335,"","","","","",""
我想要像下面這樣的 CSV 數據。
1,260,37335,,,,,,
看起來Ruby會自動添加“”。
我該怎么做??
為了讓 CSV 輸出一個空列,您需要告訴它該列中沒有任何內容。 一個空字符串,在 ruby 中,仍然是一些東西,你需要用nil
替換這些空字符串以獲得你想要的輸出:
csv_str = CSV.generate do |csv|
csv << [1,260,37335,'','','','','',''].map do |col|
col.respond_to?(:empty?) && col.empty? ? nil : col
end
end
# => 1,260,37335,,,,,,
在 rails 中,您可以通過使用presence
來清理它,盡管這也會清除false
:
csv_str = CSV.generate do |csv|
csv << [1,260,37335,'',false, nil,'','',''].map(&:presence)
end
# => 1,260,37335,,,,,,
CSV 文檔顯示了可用於這種情況的選項。 沒有例子,但你可以猜到它的作用。
唯一的考慮是,你需要發送一個字符串數組,否則,你會得到一個NoMethodError
csv_str = CSV.generate(write_empty_value: nil) do |csv|
csv << [1,260,37335,'','','','','','', false, ' ', nil].map(&:to_s)
end
=> "1,260,37335,,,,,,,false, ,\n"
此解決方案的好處是,您可以保留false
。
我自己解決了!
在 somethings_controller.rb 中
send_data render_to_string.gsub("\"\"",""), type: :csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.