You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby 3.1.2中CSV文件行删除的邮箱校验功能实现问题

需求与问题

需要在Ruby 3.1.2环境下处理车辆信息CSV文件,实现以下逻辑:

  • 用户输入邮箱时,若输入的不是CSV中存在的有效邮箱,需提示重新输入直到正确
  • 输入正确邮箱后,删除对应行并更新CSV
    现有代码可实现行删除,但缺少邮箱有效性校验环节,导致无效邮箱输入仍会执行后续操作。

车辆信息CSV示例

make,model,color,doors,email
dodge,charger,black,4,practice1@whatever.com
ford,focus,blue,5,practice2@whatever.com
nissan,350z,black,2,practice3@whatever.com
mazda,miata,white,2,practice4@whatever.com
honda,civid,brown,4,practice5@whatever.com
corvette,stingray,red,2,practice6@whatever.com
ford,fiesta,blue,5,practice7@whatever.com
bmw,m4,black,2,practice8@whatever.com
audi,a5,blue,2,practice9@whatever.com
subaru,brz,black,2,practice10@whatever.com
lexus,rc,black,2,practice11@whatever.com

现有代码(缺少校验)

def delete_from_data
    print "\nTo delete a car, enter the email (this is case sensitive): \n> "
    delete_car = gets.chomp

    #this allows me to delete a certain row based on email
    table = CSV.table("cars.csv")
    table.delete_if do |row|
        row[:email] == delete_car
    end
    File.open("cars.csv", "w") do |f|
        f.write(table.to_csv)
    end

    #this shows the updated student roster after deleting user
    puts "\nThis is the updated roster after deleting: #{delete_car}"
end 

补充校验后的完整代码

require 'csv'

def delete_from_data
  # 读取CSV并提取所有有效邮箱
  table = CSV.table("cars.csv")
  valid_emails = table.map { |row| row[:email] }

  # 循环获取输入,直到用户输入有效邮箱
  loop do
    print "\nTo delete a car, enter the email (this is case sensitive): \n> "
    delete_car = gets.chomp

    if valid_emails.include?(delete_car)
      # 邮箱有效,执行删除操作
      table.delete_if { |row| row[:email] == delete_car }
      File.open("cars.csv", "w") { |f| f.write(table.to_csv) }
      puts "\nThis is the updated roster after deleting: #{delete_car}"
      break # 退出循环
    else
      # 邮箱无效,提示重新输入
      puts "Error: Email not found. Please enter a valid email from the list."
    end
  end
end

核心修改点

  • 提前读取CSV并提取所有valid_emails,用于后续合法性校验
  • 使用loop循环实现重复输入提示,直到用户输入有效邮箱
  • 通过valid_emails.include?(delete_car)判断输入是否合法,仅合法时才执行删除和文件更新操作
  • 无效输入时给出明确提示,引导用户重新输入

内容的提问来源于stack exchange,提问作者burner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:30:59