我正在尝试比较两个文本文件,并将它们的差异写入另一个文本文件。但我得到了错误的差异。也就是说,两个文件中存在的名称也属于差异文件。
我正在使用这个代码,这是我从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
我希望你能从结果文件中理解我的问题。作为一个新手帮我直接回答。
答案 0 :(得分:1)
看起来你在file1.txt中有尾随空格,这会导致差异。
E.g。 "colors "
不等于"colors"
,导致它们列在不同的部分中。
如果要在比较行之前去除所有前导和尾随空格,可以使用.strip
:
f1 = IO.readlines("file1.txt").map(&:strip)
f2 = IO.readlines("file2.txt").map(&:strip)
这应该产生你期望的结果,即使你不小心有一些尾随的空格。