允许用户编辑CSV文件



在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 

例如如果用户输入";CCD_ 1";,则CSV文件中的整行被删除。但是,如果用户从CSV文件中输入了除有效电子邮件地址之外的任何其他内容,它仍然会运行。

您应该阅读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

最新更新