KEN_ALL.CSVのインポートスクリプト
こんな感じで良いのかなぁ…
rails の Rakefile にかいた。
task :import_zip do |t| require "nkf" require "csv" require "generator" require File.dirname(__FILE__) + "/config/environment" ZipCode.delete_all Fields = %W[local_authority_id old_code code prefecture_kana city_kana town_kana prefecture city town divided koaza cho multi updated reason_of_update].join(',') gen = Generator.new do |g| counter = 0 open(File.dirname(__FILE__) + "/public/KEN_ALL.CSV").each do |line| counter += 1 values = NKF.nkf("-w -S", line).split(',').map {|it| it.delete('"') } .map {|it| ActiveRecord::Base.quote(it) }.join(',') ActiveRecord::Base.connection.execute("insert into zip_codes (#{Fields}) values(#{values}) ") if counter % 100 == 0 print "\r#{counter}" STDOUT.flush end if counter % 1000 == 0 g.yield false end end end while gen.next? do ZipCode.transaction do |tr| gen.next end end puts "糞仕様のフォローをするよ!" ZipCode.count(:id, :group => "code", :having => "count(id) > 1", :conditions => "multi = 0").each do |code, id| records = ZipCode.find(:all, :conditions => ['code = ?', code], :order => 'id') first_record = records.first first_record.town = records.inject("") {|r, v| r + v.town } first_record.save! ZipCode.delete_all(['id in (?)', records[1, records.size].map {|it| it.id }]) end end