2
A
回答
3
require 'sequel'
DB = Sequel.sqlite
# since Sequel 3.48.0 to_csv is deprecated,
# we must load the to_csv feature via a extension
DB.extension(:sequel_3_dataset_methods) #define to_csv
DB.create_table(:test){
Fixnum :one
Fixnum :two
Fixnum :three
}
#Prepare some test data
5.times{|i|
DB[:test].insert(i,i*2,i*3)
}
File.open('test.csv', 'w'){|f|
f << DB[:test].to_csv
}
結果是:
one, two, three
0, 0, 0
1, 2, 3
2, 4, 6
3, 6, 9
4, 8, 12
在我的測試中,我曾與行結束的問題,所以我需要一個額外的gsub
:
File.open('test.csv', 'w'){|f|
f << DB[:test].to_csv.gsub("\r\n","\n")
}
如果您想要不帶標題行的導出,我們Èto_csv(false)
備註:
.to_csv
因爲續集3.48.0(2013年6月1日)已過時。 您可以使用舊版本gem 'sequel', '< 3.48.0'
或加載擴展sequel_3_dataset_methods
)。
要獲取其他分隔符和其他CSV的功能支持,你可以使用續集和CSV的組合:
require 'sequel'
require 'csv'
#Build test data
DB = Sequel.sqlite
DB.create_table(:test){
Fixnum :one
Fixnum :two
Fixnum :three
String :four
}
#Prepare some test data
5.times{|i|
DB[:test].insert(i,i*2,i*3, '<a href="www.test.com">test, no %i</a>' % i)
}
#Build csv-file
File.open('test.csv', 'w'){|f|
DB[:test].each{|data|
f << data.values.to_csv(:col_sep=>';')
}
}
結果:
0;0;0;"<a href=""www.test.com"">test, no 0</a>"
1;2;3;"<a href=""www.test.com"">test, no 1</a>"
2;4;6;"<a href=""www.test.com"">test, no 2</a>"
3;6;9;"<a href=""www.test.com"">test, no 3</a>"
4;8;12;"<a href=""www.test.com"">test, no 4</a>"
作爲替代你可修補Sequel :: Dataset(修改後的代碼,來自marcalc at Github的帖子):
class Sequel::Dataset
require 'csv'
#
#Options:
#* include_column_titles: true/false. default true
#* Other options are forwarded to CSV.generate
def to_csv(options={})
include_column_titles = options.delete(:include_column_titles){true} #default: true
n = naked
cols = n.columns
csv_string = CSV.generate(options) do |csv|
csv << cols if include_column_titles
n.each{|r| csv << cols.collect{|c| r[c] } }
end
csv_string
end
end
1
# Assume that model is an activerecord model
@secrets = Model.all
@csv = CSV.generate do |csv|
@secrets.each { |secret|
csv << ["#{secret.attr1.to_s}", "#{secret.attr2.to_s"] # and so on till your row is finished
}
end
render :text => @csv, :content_type => 'application/csv'
如果您還有其他問題,請發表評論。
相關問題
- 1. 以CSV導出SQLITE3數據庫表
- 2. 將列表視圖的內容導出到CSV文件
- 3. 將SQL Server 2008 R2表格的內容導出爲CSV無xp_cmdshell
- 4. 從sqlite3導出表格
- 5. CSV導入錯誤SQLite3
- 6. csv導入到sqlite3崩潰
- 7. Java以編程方式將csv導入到SQLite3表中
- 8. 導出內容
- 9. 內容導出
- 10. sqlite3命令編輯表中的內容
- 11. 導出爲CSV表
- 12. 以csv格式導出表格
- 13. 導出Drupal內容?
- 14. 從iphone導入sqlite3中的csv文件。
- 15. 以Javascript導出到CSV
- 16. 如何逃脫從列內容的分隔符時導出CSV
- 17. 如何從iPhone上的sqlite3導出爲CSV格式?
- 18. 將CSV單元格內容導出爲.txt,其內容爲文件名(R)
- 19. ektron中的內容導出
- 20. C# - 導出列表框內容到XML
- 21. 導軌 - CSV(導出爲csv)
- 22. 導出爲Excel不導出Gridview內容
- 23. jquery導出表csv,pdf
- 24. MySQLi將表導出爲CSV
- 25. Sybase ASE 12.0 CSV表導出
- 26. 將mysql表導出到csv
- 27. 導出HTML表到csv
- 28. 將表導出爲CSV
- 29. jQuery表格到CSV導出
- 30. 將MySql表導出爲CSV?
好吧,逗號和行結束可能是一個問題,因爲我將在我的字段中有用戶生成的html代碼。內置「.mode csv」的sqlite可以很好地避免逗號和行結束,有沒有辦法直接從ruby調用它? – TopperH
我擴展了我的答案。該示例使用另一列分隔符和「被屏蔽。 – knut