这就是我正在做的事情(抱歉变量名称,我没有在我的代码中使用这些名称):
File.open("out_file_1.txt", "w") do |out_1|
File.open("out_file_2.txt", "w") do |out_2|
File.open_and_process("in_file_1.txt", "r") do |in_1|
File.open_and_process("in_file_2.txt", "r") do |in_2|
while line_1 = in_1.gets do
line_2 = in_2.gets #input files have the same number of lines
#process data and output to files
end
end
end
end
end
open_and_process方法只是打开文件并在完成后关闭它。它来自镐书。
无论如何,主要问题是代码嵌套太深。我无法将所有文件的内容加载到内存中,因此我必须逐行迭代。有一个更好的方法吗?或者至少美化它?
答案 0 :(得分:1)
在没有意义的情况下,您不需要使用open的块语法
答案 1 :(得分:0)
我不确定这个版本对于双文件的情况好多了,但它的嵌套肯定不那么深。
outfiles = [1,2].map {|n| File.open("outfile#{n}.txt", 'w') }
infiles = [1,2].map {|n| File.open("infile#{n}.txt", "r")}
while (lines = infiles.map {|f| f.gets})).all?
lines.each_with_index {|l, n| outfiles[n].puts("processed #{l}")}
end
(outfiles + infiles).each {|f| f.close}