Ruby:排序2d数组并将类似的字段值输出到文件
我使用以下代码从excel(使用ParseExcel)读取数组:Ruby:排序2d数组并将类似的字段值输出到文件,ruby,excel,Ruby,Excel,我使用以下代码从excel(使用ParseExcel)读取数组: workbook = Spreadsheet::ParseExcel.parse("test.xls") rows = workbook.worksheet(1).map() { |r| r }.compact grid = rows.map() { |r| r.map() { |c| c.to_s('latin1') unless c.nil?}.compact rescue nil } grid.sort_by { |k| k
workbook = Spreadsheet::ParseExcel.parse("test.xls")
rows = workbook.worksheet(1).map() { |r| r }.compact
grid = rows.map() { |r| r.map() { |c| c.to_s('latin1') unless c.nil?}.compact rescue nil }
grid.sort_by { |k| k[2]}
test.xls有很多行和6列。上面的代码按第3列排序
我想将数组“grid”中的行输出到许多文本文件,如下所示:
-排序后,我想将第3列中具有相同值的所有行打印到一个文件中,以此类推,对于第3列中其他相同值的不同文件
希望我能解释清楚。谢谢你的帮助/提示
附言。
我搜索了这个站点上的大多数帖子,但没有找到任何解决方案。我没有使用上面的代码,而是制作了一个测试100行数组,每行包含一个6元素数组 传入数组和要匹配的列号,然后此方法将具有相同第n个元素的行打印到单独的文件中 因为我使用整数,所以我使用每行的第n个元素作为文件名。如果第n个元素的文件名不好,可以使用计数器、元素的md5或类似的东西
a = []
100.times do
b = []
6.times do
b.push rand(10)
end
a.push(b)
end
def print_files(a, column)
h = Hash.new
a.each do |element|
h[element[2]] ? (h[element[column]] = h[element[column]].push(element)) : (h[element[column]] = [element])
end
h.each do |k, v|
File.open("output/" + k.to_s, 'w') do |f|
v.each do |line|
f.puts line.join(", ")
end
end
end
end
print_files(a, 2)
下面是使用块而不是do的相同代码。。完:
a = Array.new
100.times{b = Array.new;6.times{b.push rand(10)};a.push(b)}
def print_files(a, column)
h = Hash.new
a.each{|element| h[element[2]] ? (h[element[column]] = h[element[column]].push(element)) : (h[element[column]] = [element])}
h.map{|k, v| File.open("output/" + k.to_s, 'w'){|f| v.map{|line| f.puts line.join(", ")}}}
end
print_files(a, 2)