我有一个保存在数组中的人员列表,我想与寻找匹配的组织循环一个文件并保存它们但是它一直出错。我想我的数组有问题。
这正是我正在做的事情:
我现在得到的是两行数据,其中一行充满了所有人。请参阅下面的代码。在底部我有一些示例输入数据。
require 'csv'
array_pers1 = []
array_pers2 = []
array_orgaan = []
array_functie = []
array_rol = []
filename_1 = 'personen_fixed.csv'
CSV.foreach(filename_1, :col_sep => ";", :encoding => "windows-1251:utf-8", :return_headers => false) do |row|
array_pers1 << row[0].to_s
end
filename_2 = 'Functies_fixed.csv'
CSV.foreach(filename_2, :col_sep => ";", :encoding => "windows-1251:utf-8", :return_headers => false) do |row|
array_pers2 << row[1].to_s
array_orgaan << row[16].to_s
array_functie << row[17].to_s
array_rol << row[18].to_s
end
CSV.open("testrij.csv", "w") do |row|
row << ["rijnummer","link","ptext","soort_woonhuis"]
for rij in array_pers1
for x in 1...4426 do
if rij === array_pers2["#{x}".to_f]
pers2 = array_pers2["#{x}".to_f]
orgaan = array_orgaan["#{x}".to_f]
functie = array_functie["#{x}".to_f]
rol = array_rol["#{x}".to_f]
row << [pers2,orgaan,functie,rol]
else
pers2 = ""
orgaan = ""
functie = ""
rol = ""
end
end
end
end
输入第一个Excel数据的数据(excel列名和第一行数据):
person
someonesname
输入第二个excel文件的数据:
person,organizationid,role,organization,function
someonesname,34971,member,americanairways,boardofdirectors
由于数据集中的许多人在不同的组织中有多个工作,我想将它们保存在彼此旁边(我想要的输出):
person,organization(1),function(1),role(1),organization(2),function(2),role(2) (max 5)
答案 0 :(得分:0)
我不明白将Functies csv文件中的单行存储在4个单独的数组中,然后将它们组合在一起的目的,所以我的答案并没有告诉您为什么你的方法不起作用。相反,我建议采用一种我认为更清洁的不同方法。
从第一个文件构建名称数组是可以的。对于第二个文件,我将每行存储为一个数组并使用哈希:
data = {
"name1 => ["name1", "orgaan1", "functie1", "rol1"],
"name2 => ["name2", "orgaan2", "functie2", "rol2"],
...
}
构建它可能看起来像
data = {}
CSV.foreach(filename_2, :col_sep => ";", :encoding => "windows-1251:utf-8", :return_headers => false) do |row|
name = row[1]
orgaan = row[16]
functie = row[17]
rol = row[18]
data[name] = [name, orgaan, functie, rol]
end
然后,您将迭代第一个数组并保留所有匹配的数组
results = []
for name in array_pers1
results << data[name] if data.include?(name)
end
另一方面,如果你不想使用哈希并坚持使用数组(可能因为名称不是唯一的),我仍然会像
那样存储它们data = [
["name1", "orgaan1", "functie1", "rol1"],
["name2", "orgaan2", "functie2", "rol2"]
]
然后在搜索步骤中,您只需像
一样进行迭代results = []
for name in array_pers1
for row in data
results << row if row[0] == name
end
end