在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文件中的有效电子邮件地址,它仍然可以运行。
1条答案
按热度按时间5n0oy7gb1#
你应该阅读CSV::Table的文档,注意到它有一个
#each
方法,允许你遍历行。事实上,很多Ruby容器类都有一个#each
方法,所以如果你想在Ruby中做任何有意义的事情,你需要熟悉它。应该可以这样做:
请注意,这并不意味着是漂亮或优化的代码,而是简单的初级代码。
要获得额外的学分,请学习Ruby的Enumerable模块,并使用
.any?
而不是.each
。