2

我有两个结构相同的 CSV 文件,理想情况下应该有相同的数据。

我想使用 Ruby 比较它们中的数据,并想知道我们是否已经有相同的 Ruby 函数。

4

2 回答 2

6

如果您想检查文件是否相同,您可以简单地使用identical?which 是 的别名compare_file

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)
于 2013-12-15T12:42:33.593 回答
4

正如 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

请注意,for在 Ruby 中使用非常罕见。您通常在集合上使用 an 进行迭代each,但这里有两个。

另外,请注意其中一个列表可能比另一个长,但这应该可以帮助您入门。

于 2013-05-02T19:02:47.140 回答