在 Ruby 中将 CSV headers 转换为不区分大小写
Converting CSV headers to be case insensitive in Ruby
我有一个 ruby 导入到数据库的过程,该过程根据名为 headers 的数组检查 header 个标题。就目前而言,那些 headers 的类型必须与它们在数组中出现的完全相同。我希望他们被接受,无论他们是大写还是小写。
CSV.foreach(FILE, encoding:'iso-8859-1:utf-8', headers: true, skip_blanks: true) do |row|
# check the header row, make sure all are acceptable
if count == 0
row.headers.each do |header|
if (!headers.include? header) and !header.nil? and header != ""
log.error "#{header} is not a valid header"
exit
end
end
end
目前接受:"Ast_A"
但不接受:"ast_a"
我已经尝试了 Convert hash keys to lowercase -- Ruby Beginner 中的代码但无济于事。我的问题是如何在导入过程中使 .csv 导入 header 行不区分大小写?
您可以提供一个 header_converter
object 来响应 call
方法并接收 header
字符串作为参数,例如 lambda
或 proc
:
converter = lambda { |header| header.downcase }
CSV.foreach([...], headers: true, header_converters: converter, [...]) do |row|
有了这个,所有headers都将被解析为小写。然后,您可以将它与局部变量 headers
.
的小写版本进行比较
我有一个 ruby 导入到数据库的过程,该过程根据名为 headers 的数组检查 header 个标题。就目前而言,那些 headers 的类型必须与它们在数组中出现的完全相同。我希望他们被接受,无论他们是大写还是小写。
CSV.foreach(FILE, encoding:'iso-8859-1:utf-8', headers: true, skip_blanks: true) do |row|
# check the header row, make sure all are acceptable
if count == 0
row.headers.each do |header|
if (!headers.include? header) and !header.nil? and header != ""
log.error "#{header} is not a valid header"
exit
end
end
end
目前接受:"Ast_A" 但不接受:"ast_a" 我已经尝试了 Convert hash keys to lowercase -- Ruby Beginner 中的代码但无济于事。我的问题是如何在导入过程中使 .csv 导入 header 行不区分大小写?
您可以提供一个 header_converter
object 来响应 call
方法并接收 header
字符串作为参数,例如 lambda
或 proc
:
converter = lambda { |header| header.downcase }
CSV.foreach([...], headers: true, header_converters: converter, [...]) do |row|
有了这个,所有headers都将被解析为小写。然后,您可以将它与局部变量 headers
.