明日の11時までにこのcsvファイルをひとまとめにしておいてね
わお徹夜だ☆
ではなく。。。
簡単なスクリプトを組んで一瞬で終わらせてしまいましょう
1.csv
user_id, user_name, mail_address, comment
0001, ホゲほげ男, hogeo@example.com, hogehoge
0002, ホゲほげ子, hogeko@example.com, hogehogehoge
2.csv
user_id, user_name_alphabet, comment2
0001, hoge hogeo, aaaaaa
0002, hoge hogeko, bbbbb
というようなcsvファイルがあったとします。ここでエクセルを使う必要はありません。
以下のようなスクリプトを書けば良いのです
merge.rb
require 'pp'
require 'csv'
class CSVMerger
def save_csv
CSV.open("./merged.csv", "wb") do |csv|
merge_array_from_csv.each do |element|
csv << element
end
end
end
def merge_array_from_csv
list1 = load_csv("1.csv")
list2 = load_csv("2.csv")
generated_array = []
generated_array_element = []
for i in 0..(list1.count.to_i - 1)
for j in 0..(list2.count.to_i - 1)
if (list1[i][0] == list2[j][0])
generated_array_element.concat(list1[i]).concat(list2[j])
generated_array << generated_array_element.pop(8).uniq!
end
end
end
return generated_array
end
def load_csv(target_file_name)
return CSV.parse(open("./" << target_file_name).read)
end
end
csv_merger = CSVMerger.new()
csv_merger.save_csv
なにをやっているかというと、それぞれのcsvを読み込んで配列とし、
共通要素であるuser_idをもとに、for文で1.csvを上から舐めていき、さらにその中で2.csvを上から舐めて、一致する行の要素をconcatでマージし、uniq!で要素の重複を取り除いています。
冗長な感じになりますが、csvファイルが2個以上の場合でもfor文とif文を修正&追加することで対応できます