比较文件,找出它们之间的区别,在ruby中返回错误的结果。

时间:2015-09-16 07:42:27

标签: ruby difference

我正在尝试比较两个文本文件,并将它们的差异写入另一个文本文件。但我得到了错误的差异。也就是说,两个文件中存在的名称也属于差异文件。

我正在使用这个代码,这是我从stackoverflow获得的。

#new file
f1 = IO.readlines("file1.txt").map(&:chomp)
#old file
f2 = IO.readlines("file2.txt").map(&:chomp)

File.open("result.txt","w"){ |f| f.write("NEED TO ADD:\n")}
File.open("result.txt","a"){ |f| f.write((f1-f2).join("\n")) }
File.open("result.txt","a"){ |f| f.write("--------------------\n")}
File.open("result.txt","a"){ |f| f.write("NEED TO REMOVE:\n")}
File.open("result.txt","a"){ |f| f.write((f2-f1).join("\n")) }

我在file1.txt和file2.txt

中有以下内容

file1.txt包含:

colors  
channel [v]     
star plus   
star utsav  
sony
life ok             
zee salaam
zee tv      
nepal one   
zee anmol                
flowers tv   

file2.txt包含:

colors
sony entertainment
star plus
star utsav
zee tv
life ok
dd national
etc bollywood
zee anmol 

和我的result.txt文件包含:

NEED TO ADD:
colors  
channel [v]     
star plus   
star utsav  
sony
life ok             
zee salaam
zee tv      
nepal one   
zee anmol                
flowers tv   
---------------------------------------------------
NEED TO REMOVE:
colors
sony entertainment
star plus
star utsav
zee tv
life ok
dd national 
etc bollywood
zee anmol 

我希望你能从结果文件中理解我的问题。作为一个新手帮我直接回答。

1 个答案:

答案 0 :(得分:1)

看起来你在file1.txt中有尾随空格,这会导致差异。

E.g。 "colors "不等于"colors",导致它们列在不同的部分中。

如果要在比较行之前去除所有前导和尾随空格,可以使用.strip

f1 = IO.readlines("file1.txt").map(&:strip)
f2 = IO.readlines("file2.txt").map(&:strip)

这应该产生你期望的结果,即使你不小心有一些尾随的空格。