我想阅读两个文本文件,并按照以下方式同时处理它们:
f1 = File.open(...)
f2 = File.open(...)
|f1, f2|.each do |l1,l2|
......
end
我如何在Ruby中执行此操作?
答案 0 :(得分:9)
如何避免与matt的答案相关的记忆吮吸:
f1 = File.open(...)
f2 = File.open(...)
f1.each.zip(f2.each).each do |line1, line2|
# Do something with the lines
end
zip
是Enumerable中许多鲜为人知的方法之一,值得了解,特别是如果您对学习函数式编程范例感兴趣的话。
它避免了与matt的答案相关的记忆吮吸,因为f1.each
不是读取所有内容,而是返回一个只能在你需要时使用的枚举器。
答案 1 :(得分:1)
f1 = File.open(...)
f2 = File.open(...)
f1.each do |l1|
l2 = f2.gets.chomp
......
end
答案 2 :(得分:1)
一种天真的方法,假设文件的行数相同。这完全是手动的,但这个想法可以为你提供一些东西:
f1 = File.open('foo.txt', 'r')
f2 = File.open('bar.txt', 'r')
while line1 = f1.gets && line2 = f2.gets
print "File 1: #{line1}"
print "File 2: #{line2}"
end
一旦两个文件中的任何一个用完行(如果一个比另一个短),这将停止。显然,这可能是你想要的,也可能不是你想要的。
答案 3 :(得分:0)
这件事对你有用吗? :
File.readlines(file1).each do |line_of_file1|
File.readlines(file2).each do |line_of_file2|
# Do stuff with the lines
end
end
答案 4 :(得分:0)
lines1 = File.open(...).readlines
lines2 = File.open(...).readlines
lines1.zip(lines2).each do |line1, line2|
...
end