app/libの下にprice_importer.rbを作成し、app/で実行する
$ ruby script/runner PriceImporter.execute
以下の内容
require 'csv' class PriceImporter class << self def execute() begin result = system("/path/to/script/getfile.sh") #←<a href="http://kagen88.blogspot.com/2011/12/shelllftp.html">前回作成したshellスクリプト</a> print result Dir::glob("/path/to/data/*.csv").each {|f| #←取得したcsvファイルを保存する場所の(すべての?)csvをループ puts "#{f}: #{File::stat(f).size} bytes" #←サイズを表示してみる cf=File.open(f,"r") #←開く buf=cf.read() #←読む @parsed_file = CSV::Reader.parse(convertSjis2UTF8(buf)) #←CSVハッシュに格納、その前にsjisをutf8に @parsed_file.shift #←最初のタイトル行をスキップ @parsed_file.each do |row| pd = Product.find_by_code(row[0]) #←既存のテーブルモデルを使って、コードの有無を確認 if pd Price.delete_all "pd_id = " + pd.id.to_s + " AND base_date_on = '" + row[4] + "'" #←上書きしたいので、一致したレコードを削除 p = Price.new p.pd_id = pd.id p.base_date_on = row[4] p.price = row[5] p.save #←インサート else RAILS_DEFAULT_LOGGER.debug("コード(" + row[0] + ")がproductsテーブルに存在しない。ご確認ください。") puts "コード(" + row[0] + ")がproductsテーブルに存在しない。ご確認ください。" end end } rescue => e RAILS_DEFAULT_LOGGER.debug(e) raise end end def convertSjis2UTF8(val)←utf8変換 val.kconv(Kconv::UTF8, Kconv::SJIS) unless val.blank? end end end以上
0 件のコメント:
コメントを投稿