比较文件以在 ruby returns 错误结果中找到它们之间的差异。

comparing files to find difference between them in ruby returns wrong result.

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

我正在使用我从 Whosebug 获得的代码。

#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 

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

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

例如"colors " 不等于 "colors",导致它们被列在不同的部分。

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

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

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