在Ruby中同时处理两个文件

时间:2011-06-22 10:52:05

标签: ruby

我想阅读两个文本文件,并按照以下方式同时处理它们:

f1 = File.open(...)
f2 = File.open(...)

|f1, f2|.each do |l1,l2|
    ......
end

我如何在Ruby中执行此操作?

5 个答案:

答案 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