【问题标题】:Ruby CSV Compare Two CSV FilesRuby CSV 比较两个 CSV 文件
【发布时间】:2019-07-30 12:05:24
【问题描述】:

我有两个标题相同的 CSV 文件。我想比较这些文件并返回第二个文件中缺少的条目。这是一个例子:

file1.csv

fname,lname,city,state
Joe,Smith,Dallas,TX
Jane,Done,Baltimore,MD
Frank,Jones,Plano,TX

file2.csv

fname,lname,city,state
Joe,Smith,Dallas,TX
Jane,Done,Baltimore,MD

这是我的代码:

# Returns True if a match is found
# and False if none is found
def find_in_csv(csv_text,search_column,search_string)
  csv_text.find {|row|
    return row[search_column] == search_string
  }
end

如何扩展此功能以允许返回缺失的行?

【问题讨论】:

  • 如果您只是想要file1.csv 中不存在于file2.csv 中的行,您可以使用IO#readlines:IO.readlines('file2.csv', chomp: true) - IO.readlines('file1.csv', chomp: true) #=> ["Joe,Smith,Dallas,TX"](即,不需要CSV 方法)。

标签: ruby csv


【解决方案1】:

这将返回 file1.csv 中存在但在 file2.csv 中丢失的行数组

csv1 = CSV.read("file1.csv")
csv2 = CSV.read("file2.csv")

csv1 - csv2

【讨论】:

  • 要清楚,这返回[["Frank", "Jones", "Plano", "TX"]],而file1.csv的对应行(这里只有一行)是["Joe,Smith,Dallas,TX\n"]。这个问题不清楚这些数组中的哪一个是需要的。
猜你喜欢
  • 2022-01-04
  • 1970-01-01
  • 2012-09-05
  • 2014-06-14
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多