gpt4 book ai didi

ruby - 检查 CSV header 是否存在

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:43 27 4
gpt4 key购买 nike

我的 Rails 应用程序有一个 Importer 类,我在其中使用方法导入 CSV 文件。

def import
CSV.foreach(file.path, headers: true, encoding: "iso-8859-1") do |row|
mail = row["email"]||row["Email"]||row["e-mail"]||row["E-mail"]||row["mail"]||row["Mail"]
end
end

我将变量 mail 设置为在循环内执行操作,我试图保护它免受不同名称的邮件列的影响,但我不知道应该如何打破循环并保持代码 DRY 以防万一当 CSV 没有包含任何已定义标题的列时。

编辑:

def import
header = nil
headers = CSV.open(file.path, encoding: "iso-8859-1") { |csv| csv.first }
headers.each { |e| header = e if e.downcase.gsub('-','')=~/^(|e)mail$/ }
if header != nil
CSV.foreach(file.path, headers: true, encoding: "iso-8859-1") do |row|
mail = row[header]
end
end
end

问题的解决

最佳答案

这应该可以帮助您入门。您需要更改正则表达式以匹配您的所有情况。

def import
CSV.foreach(file.path, headers: true, encoding: "iso-8859-1") do |row|
if row.headers.none?{|e| e =~ /email/i}
raise "freak out"
end
end
end

我还会考虑设置一个变量 has_email_headers,您可以检查它,因为您不想扫描每一行的标题,因为它们都是一样的。

关于ruby - 检查 CSV header 是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29914187/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com