在 Ruby 中,我有這個 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
有了這個代碼,如果用戶輸入了無效的電子郵件(拼寫錯誤的電子郵件或與 CSV 檔案中的電子郵件不匹配的任何內容),我該怎么做,它會要求輸入有效的電子郵件,因為他們鍵入的不是來自 CSV 檔案的電子郵件
uj5u.com熱心網友回復:
table 先加載。
現在您可以使用#any?來查看是否有任何行包含該電子郵件地址。
table.any? { |row| row[:email] == delete_car }
現在,只需在回圈中執行此操作,當輸入電子郵件地址在表中時,打破回圈并回傳輸入電子郵件。
delete_car = loop do
email = gets.chomp
break email if table.any? { |row| row[:email] == email }
puts "Invalid input. Try again."
end
您可能還希望生成一組有效的電子郵件地址。如果您認為需要回圈多次,這可能會帶來更好的性能。
valid_emails = table.map { |row| row[:email] }.to_set
delete_car = loop do
email = gets.chomp
break email if valid_emails.include?(email)
puts "Invalid input. Try again."
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516605.html
標籤:红宝石CSV
上一篇:Ruby:在目錄中查找檔案
下一篇:無法過濾散列陣列,因為鍵沒有屬性
