我有两个具有相同结构的CSV文件,理想情况下应该具有相同的数据。
我想用Ruby比较它们中的数据,并想知道我们是否已经有相同的Ruby函数。
答案 0 :(得分:4)
如果您想检查文件是否相同,只需使用identical?
compare_file
的别名{/ 1}}:
FileUtils.identical?('file1.csv', 'file2.csv')
如果您想查看差异,可以使用diffy
:
gem install diffy
puts Diffy::Diff.new('file1.csv', 'file2.csv', :source => 'files')
它产生类似于diff的输出,可以很好地格式化为HTML:
puts Diffy::Diff.new('file1.csv', 'file2.csv', :source => 'files').to_s(:html_simple)
答案 1 :(得分:2)
正如Summea所评论,请查看CSV类。
然后使用:
#Will store each line of each file as an array of fields (so an array of arrays).
file1_lines = CSV.read("file1.csv")
file2_lines = CSV.read("file2.csv")
for i in 0..file1_lines.size
if (file1_lines[i] == file2_lines[i]
puts "Same #{file1_lines[i]}"
else
puts "#{file1_lines[i]} != #{file2_lines[i]}"
end
end
请注意,在Ruby中使用for
非常少见。您通常在集合上使用each
进行迭代,但这里有两个。
另外,请注意其中一个列表可能比另一个更长,但这应该可以帮助您开始。