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接口

相关文章
相关标签/搜索