Ruby:有没有更好的方法来迭代多个(大)文件?
下面是我正在做的事情(对于变量名,我很抱歉,我没有在代码中使用这些名称): open_和_process方法只是打开文件并在完成后关闭它。这是摘自鹤嘴锄的书Ruby:有没有更好的方法来迭代多个(大)文件?,ruby,file,file-io,refactoring,Ruby,File,File Io,Refactoring,下面是我正在做的事情(对于变量名,我很抱歉,我没有在代码中使用这些名称): open_和_process方法只是打开文件并在完成后关闭它。这是摘自鹤嘴锄的书 无论如何,主要问题是代码嵌套太深。我无法将所有文件的内容加载到内存中,因此我必须逐行迭代。有更好的方法吗?或者至少美化一下它?我不确定这个版本对于两个文件的情况是否更好,但它的嵌套程度肯定没有那么深 outfiles = [1,2].map {|n| File.open("outfile#{n}.txt", 'w') } infiles =
无论如何,主要问题是代码嵌套太深。我无法将所有文件的内容加载到内存中,因此我必须逐行迭代。有更好的方法吗?或者至少美化一下它?我不确定这个版本对于两个文件的情况是否更好,但它的嵌套程度肯定没有那么深
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}
在没有意义的情况下,不需要使用open的块语法
我喜欢你所做的,但我同时访问了两行,因此如果我以这种方式使用它,我必须添加更多变量以保持两行读数之间的状态,这使得它太复杂了,我想如果我理解你的意思,在while循环的每个步骤中,这两行都可以同时访问,这两行将是一个两成员数组,其中包含每个输入文件中最近读取的行。
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}