Taki plik sample/import.rb sobie stworzyłem (Spree 0.30)
[code]require ‘csv’
CSV.foreach("#{Rails.root}/db/data_for_import/products.csv", headers: true, converters: :numeric) do |row|
p = Product.create :name => row[“Name”], :price => row[“Price”], :description => “ble ble”
p.available_on = Time.now
end[/code]
odpalam rake db:sample
wszystko jest OK dopóki w plku products.csv nie ma polskich znaków, jak są polskie znaki to wywala mi błąd:
incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)
Błąd dotyczy row[“Name”] w 4 wierszu
qoobaa
2
Rzut okiem na dokumentację i kod źródłowy tej metody:
def self.foreach(path, options = Hash.new, &block)
encoding = options.delete(:encoding)
mode = "rb"
mode << ":#{encoding}" if encoding
open(path, mode, options) do |csv|
csv.each(&block)
end
end
Spróbowałbym dodać do opcji :encoding => “utf8”, lub coś podobnego.
qoobaa, wielkie dzięki. Teraz śmiga.
Pociągnę jeszcze wątek.
Czy są jakieś biblioteki do obróbki plików .xls ?
Bo w Excelu 2010 nie widzę możliwości zapisu do pliku .csv z kodowaniem UTF8
GhandaL
4
Do obróbki plików Excela (w wersji do 2010, czyli .xls) jest na przykład Spreadsheet - pozwala na odczyt i zapis.
Jeśli potrzebujesz tylko odczyt, to możesz spróbować z Roo - ale oferuje również odczyt z plików .ods, .xlsx, czy z Google Docs.
gotar
5
jest gem roo
a gdzies po drodze przelec to iconv i po sprawie
[code=ruby]#!/usr/bin/env ruby
require ‘rubygems’
require ‘roo’
pwd = File.dirname(FILE)
file = ARGV[0]
file_path = “#{pwd}/#{file}”
xls = Excel.new(file_path)
xls.to_csv("#{pwd}/#{file}.csv")[/code]
Nie zdążyłem ;]