ruby 允许用户编辑CSV文件

kr98yfug  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(128)

在Ruby 3.1.2中,使用以下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

如果用户没有输入上述CSV文件中的电子邮件地址或任何不等同于电子邮件的内容,则程序会要求用户输入有效的电子邮件地址,直到用户实际输入为止,然后更新CSV文件,删除与电子邮件对应的行。我目前的代码可以做到这一点,但没有检查用户是否输入了有效的电子邮件地址,这是我坚持的部分。这是我的代码:

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

例如,如果用户输入“practice11@whatever.com“,则CSV文件中的整行将被删除。2但是,如果用户输入的不是CSV文件中的有效电子邮件地址,它仍然可以运行。

5n0oy7gb

5n0oy7gb1#

你应该阅读CSV::Table的文档,注意到它有一个#each方法,允许你遍历行。事实上,很多Ruby容器类都有一个#each方法,所以如果你想在Ruby中做任何有意义的事情,你需要熟悉它。
应该可以这样做:

email_found = false
while !email_found
  email = gets.chomp
  table.each do |row|
    if row[:email] == email
      email_found = true 
    end
  end
end

请注意,这并不意味着是漂亮或优化的代码,而是简单的初级代码。
要获得额外的学分,请学习Ruby的Enumerable模块,并使用.any?而不是.each

相关问题