Export/import Datas To/from a Csv File

今天須要給客戶的網站作支持產品數據導出而且更新的功能,因此就涉及到了數據的導入導出了。在通過一番對比之下,果斷使用csv格式文件做爲數據導入導出的載體。
html

導出csv文件

與csv文件主要相關的類是CSV,此類在ruby的標準庫中被定義,因此只要在代碼開頭引入相關文件便可:數組

require 'csv'

接着須要建立csv文件,並在其中寫入數據:ruby

CSV.open "path/to/csv/file", "wb", :col_sep => '|' do |csv|
    csv << ["one", "row", "of", "contents"]
end

** 這裏有幾個細節值得一提:

1. open方法是用於對CSV文件進行寫操做的主要接口,對CSV文件進行寫操做都應該使用此方法;

2. << 操做符支持將
字符串數組**寫入到csv文件,一個數組爲一行,數組中的一個字符串爲一個單元(field);

3. open方法的第三個參數是一個哈希,用於爲打開的文件指定初始化賦值,具體可用的option以及其值可參考new方法的說明:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#method-c-new

4. :col_sep用於指定文件中每一行中的每一個單元之間的分隔符,當經過字符串數組想文件中添加新行的時候,CSV將會在數組元素也就是每一行的單元之間插入指定的分隔符,分隔符須要儘可能避開已經在待導出數據中存在的字符,以避免後續導入的時候發生歧義。網站

導入csv文件

導入csv除了須要用到相關的類CSV,還可能用到的類是CSV::Row,前者提供打開文件以及將文件按行分隔的方法foreach,foreach將分隔後的行逐行分配到CSV::Row的實例中,經過調用CSV::Row的實例方法field可對每一個單元進行讀取。

假設我有這樣一個csv文件:ui

id          |     value
1234        |       hello
2345        |       world

則相關的代碼以下:code

CSV.foreach('path/to/file'), :col_sep => '|', :headers => :first_row do |row|
    # use datas of each row
    id      = row.field 'id'
    value   = row.field 'value'
end

** 一樣這裏也有幾個細節須要注意:**

1. foreach是CSV類中用於讀取文件的標準方法;

2. 經過指定:col_sep => '|'可以使CSV按照指定的分隔符分隔好文件內容,方便後面field方法的調用;

3. 指定:headers => :first_row可以使CSV將第一行視爲文件的headers,而且結合:col_sep的設定能夠將headers進行分割,這兩個是field方法的基礎。htm

Related links:

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV/Row.html接口

相關文章
相關標籤/搜索