将匹配项放到文件中

时间:2011-02-22 23:56:59

标签: ruby

我在mac1.txt和mac2.txt中有mac地址,我想做这样的事情:

v = File.open("/RubyDev/sort/mac1.txt",'r').each_line do |a|
      w = File.open("/RubyDev/sort/mac2.txt",'r').each_line do |b|
            if w in v
                puts w
            end
      end
end

预先感谢您的协助!

4 个答案:

答案 0 :(得分:1)

编辑:下面的第一个版本实际上非常糟糕。这是一个更好的版本:

lines = []

File.open("mac1.txt",'r').each_line do |a|
  lines.push(a.rstrip!)
end

File.open("mac2.txt",'r').each_line do |b|
  if lines.include?(b.rstrip!)
    puts b
  end
end

我认为你所寻找的是这样的:

File.open("mac1.txt",'r').each_line do |a|
  File.open("mac2.txt",'r').each_line do |b|
    if a == b
      puts b
    end
  end
end

这是对的吗?如果没有,你能否提供更多关于这个问题的背景知识以及你想要实现的目标?

答案 1 :(得分:1)

我仍在努力学习Ruby,所以这不太可能成为一个好的解决方案,但这是一种可能性。它将第一个文件的内容读入哈希,然后检查第二个文件的内容。我认为它会合理有效(嗯......除非第一个文件太大而不能很好地适应内存)。

lines = Hash.new

File.open( "mac1.txt", 'r' ).each_line do |l|
    lines[l] = true
end

File.open( "mac2.txt", 'r' ).each_line do |l|
    if ( lines[l] == true )
        puts l
    end
end

编辑为了完整起见,这是Mark Thomas在评论中建议的非常简洁的版本,Gavin Anderegg建议删除空格。 Ruby是一种甜言蜜语。

lines = Hash.new
File.open( "mac1.txt", 'r' ).each_line {|l| lines[l.strip!] = true}
File.open( "mac2.txt", 'r' ).each_line {|l| puts l if lines[l.strip!]}

答案 2 :(得分:1)

要获取两个文件之间的所有公共行,可以使用File#readlines作为数组访问文件中的所有行。请注意,它们仍会附加换行符(“\ n”),因此您需要使用String#chomp删除它们。最简单的方法是map readlines给你的数组,common_macs = File.open("mac1.txt").readlines.map(&:chomp) & File.open("mac2.txt").readlines.map(&:chomp)

{{1}}

答案 3 :(得分:0)

lines = {}
File.open("mac1.txt").each_line {|l| lines[l.chomp] = true}
File.open("mac2.txt").each_line {|l| puts l if lines[l.chomp]}