kawabatas技術ブログ

試してみたことを書いていきます

ruby で複数の CSV で使われる ID を置換する

概要

Voice.csv の ID をリネームし、VoiceId カラムを持つ他の複数の CSV もリネームに対応するという機会があったのでメモ。

require 'csv'

class Voice
  def self.rename(str_id)
    case id = str_id.to_i
    when 1..988
      return 0 + id - 0
    when 989..1196
      return 1001 + id - 989
    else
      # headerの場合
      return str_id
    end
  end
end

voice_csv = CSV.generate do |csv|
  CSV.foreach('Voice.csv') do |data|
    # IDカラムは1列目
    data[0] = Voice.rename(data[0])
    csv << data
  end
end
File.open("Temp/Voice.csv", "w") do |file|
  file.write(voice_csv)
end


Dir.glob("*") do |file|
  if file.end_with?("csv")
    csv = CSV.generate do |csv|
      CSV.foreach(file) do |data|
        # VoiceIdカラムは2列目
        data[1] = Voice.rename(data[1])
        csv << data
      end
    end

    File.open("Temp/#{file}", "w") do |file|
      file.write(csv)
    end
  end
end