我在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
预先感谢您的协助!
答案 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]}