Ruby 尝试比较两个文本文件,并根据信息创建第三个文本文件
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt 我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的Ruby 尝试比较两个文本文件,并根据信息创建第三个文本文件,ruby,parsing,Ruby,Parsing,我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt 我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的 g = File.new("notinbook.txt", "w") File.open("926.txt", "r") do |f| while (line = f.gets) x = line.chomp if File.o
g = File.new("notinbook.txt", "w")
File.open("926.txt", "r") do |f|
while (line = f.gets)
x = line.chomp
if
File.open("master.txt","w") do |h|
end
while (line = h.gets)
if line.chomp != x
puts line
end
end
end
end
end
g.close
当然,它失败了。谢谢 使用:
或
%x(差异文件1文件2)
或
您可以这样做:
master_lines = []
File.open("notinbook.txt","w") do |result|
File.open("master.txt","r") do |master|
master.each_line do |line|
master_lines << line.chomp
end
end
File.open("926.txt","r") do |query|
query.each_line do |line|
if !master_lines.include? line.chomp
result.puts line.chomp
end
end
end
end
master_行=[]
打开(“notinbook.txt”,“w”)do | result|
打开(“master.txt”、“r”)do | master|
主控。每一条线都做一条线|
主线条这应该可以:
f1 = IO.readlines("926.txt").map(&:chomp)
f2 = IO.readlines("master.txt").map(&:chomp)
File.open("notinbook.txt","w"){ |f| f.write((f1-f2).join("\n")) }
这是我的测试:
926.txt
line1
line2
line3
line4
line5
line1
line2
line4
line3
line5
master.txt
line1
line2
line3
line4
line5
line1
line2
line4
line3
line5
notinbook.txt
line1
line2
line3
line4
line5
line1
line2
line4
line3
line5
希望这有帮助
dir = File.dirname(__FILE__)
notinbook = "#{dir}/notinbook.txt"
master = "#{dir}/master.txt"
f926 = "#{dir}/926.txt"
def file_into_ary(file)
ary = []
File.open(file).each{ |line| ary << line }
return ary
end
def write_difference(file, diff)
File.open(file, 'w') do |file|
diff.each do |line|
file.write(line)
end
end
end
diff = file_into_ary(f926) - file_into_ary(master)
write_difference(notinbook, diff) unless diff.empty?
dir=File.dirname(\uuuuu File\uuuuu)
notinbook=“#{dir}/notinbook.txt”
master=“#{dir}/master.txt”
f926=“#{dir}/926.txt”
def文件到存储库(文件)
ary=[]
每个{|行|都有可能,但如果我正确理解作者,他不会试图区分更改,而是检查给定文件中的行是否存在于另一个文件中?我修改了您的代码,试图保持这个想法,以便您可以看到缺少什么(您很接近!)尽管这样做意味着多次运行master.txt的相同行,因此效率不高,但它完成了任务。