07/09/2018, 15:32

Cách lấy data từ file csv

Mấy hôm nay vật vả ngồi tạo file excel rồi save lại dưới dạng .csv đọc dữ liệu rồi tạo table... mỏi cả mắt luôn ý chứ. Nên bây giờ có thêm một bài viết để chia sẽ @[email protected] Tạo rails app Để tạo rails app có tên là airport bạn sử dụng lệnh sau: rails new airports File CSV Đặt ...

Mấy hôm nay vật vả ngồi tạo file excel rồi save lại dưới dạng .csv đọc dữ liệu rồi tạo table... mỏi cả mắt luôn ý chứ. Nên bây giờ có thêm một bài viết để chia sẽ @[email protected]

Tạo rails app

Để tạo rails app có tên là airport bạn sử dụng lệnh sau:

rails new airports

File CSV

Đặt file .csv vào folder airport/public

Ví dụ: Mình có 1 file csv tên là airport_codes.csv thì thư mục của mình sẽ là airport/public/airport_codes.csv

Đọc file CSV

Để đọc file CSV này thì mình sẽ viết 1 rake task để thực hiện việc lướt qua từng row của nó.

Thực hiện

Bước 1: Tạo 1 model có tên là airport_code gồm có 3 thuộc tính là: city, country, airport_code

rails g model airport_code city:string country:string airport_code:string
rails rake:migrate

Bước 2: Tạo 1 task.

# create  lib/tasks/import.rake
rails g task import airport 

Bươc 3: Viết gì cho task import airport đây:

require 'csv'
namespace :import do
  desc "Get airport code from csv file"
  task airport: :environment do
    # get pwd airport_codes.csv
    airport_code_file = Rails.root + "public/airport_codes.csv"

    CSV.foreach(airport_code_file, headers: true) do |row|
      # Each row like a array. We will get value by this way:
      # row[0] => id
      # row[1] => city
      # row[2] => country
      # row[3] => airport_code

      AirportCode.create!(city: row[1], country: row[2], airport_code: row[3])
    end
  end

end

Run những gì đã viết ở bước 3:

rake import:airport

Kiểm tra lại data mình đã đọc từ file CSV và lưu vào trong database của mình:

1)

rails c

2

AirportCode.all

Yah!!! đã xong rồi đấy. Khá là đơn giản phải hok nào @[email protected]

Tìm hiểu thêm tại:

  • CSV của Ruby:

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

  • Xem code tại đây:

https://github.com/mymai91/read-csv

0