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
以上