「ユーザー」と「登録」の 2 つの CSV ファイルがあります。
001.csv:
user_id,user_name,state
12345,test_account,active
002.csv:
course_id,user_id,state
67890,12345,active
active_enrollments.csv のようなファイルを 1 つ作成する必要があります。
course_id,user_name
67890,test_account
ファイルを複数回ループせずに、これらを解析してファイル active_enrollments.csv を生成するにはどうすればよいですか?
ここに私がこれまでに持っているものがありますが、多くの重複があります:
require 'csv'
CSV.open("active-enrollments.csv", "wb") do |csv|
csv << ["course_id", "user_name", "user_id","course_name", "status"]
end
Dir["csvs/*.csv"].each do |file|
#puts file
CSV.foreach(file, :headers => true) do |row|
if row['user_id'] && row ['course_id'] #finds enrollment csvs
if row['state'] == "active" #checks for active enrollments
state = row['state']
course_id = row['course_id']
user_id = row['user_id']
Dir["csvs/*.csv"].each do |files|
CSV.foreach(files, :headers => true) do |user|
if user['user_name']
if user_id == user['user_id']
user_name = user['user_name']
Dir["csvs/*.csv"].each do |file|
CSV.foreach(file, :headers => true) do |courses|
if course_id == courses['course_id']
course_name = courses['course_name']
CSV.open("active-enrollments.csv", "a") do |csv|
csv << [course_id, user_name, user_id, course_name, state]
end
end
end
end
end
end
end
end
end
end
end
end
これが簡単であることはわかっていますが、ファイルを複数回ループして多くの重複を生成しないと取得できないようです。