ruby - 如何有效输入以匹配 CSV 文件中的数据
问题描述
我正在使用上面的 Ruby 2.7。我一直在做这个任务并且还在学习。我很确定我没有使用正确的代码。这个任务需要我做一个模拟atm程序。要求之一是我需要检查用户的有效输入是否与 CSV.file 中的数据匹配,然后用户才能访问该程序。
我正在使用 ruby(不允许使用 rails 或任何高级 ruby 代码)。我在任何地方搜索了类似的程序以供参考,但大多不涉及 CSV 文件。如何检查来自用户的输入是否有效并在 CSV 文件中匹配?我在如何进行验证以及如何使用两个输入(用户名和密码)进行验证时遇到了麻烦。该程序在命令行上运行。如果我不够清楚,请道歉。你能从我的代码中告诉我哪里出错了吗?
我有三个 .rb 文件和两个 csv 文件。我不确定是否应该创建两个单独的 csv 文件。
- function.rb(所有功能)
- login.rb(在进入 system.rb 文件之前验证来自 'user.csv' 文件的用户名和密码)
- system.rb(所有数据在“account.csv”文件中保存或更改的主要位置)
下面是function.rb
文件。
require 'csv'
class Function
def log_in(user)
CSV.foreach('user.csv', 'r', headers => true) do |row|
#check the user is valid, else error
if row[0] == uname && row[1] == pwd
puts "succesfully login"
ATMSystem.main_menu
end
end
if login == false
puts "invalid credentials."
Login.log_menu
end
end
login.rb
文件
require './function'
class Inn
def signin
function = AtmFunction.new
puts "Account login"
puts "Enter username"
uname = gets.chomp
puts "Enter password"
pwd = gets.chomp
user = [uname, pwd]
function.log_in(user)
end
end
解决方案
假设这是您的users.csv
文件:
name,password
bob,1234
alice,5678
这是一种可能的选择。
将文件加载到哈希数组Enumerable#to_h和Hash#transform_keys中:
require 'csv'
data_file = 'user.csv'
user_map = CSV.foreach(data_file, headers: true).map do |row|
row.to_h.transform_keys(&:to_sym)
end
user_map
#=> [{:name=>"bob", :password=>"1234"}, {:name=>"alice", :password=>"5678"}]
然后,给定用户的输入:
input_username = 'bob'
input_password = '1234'
检查用户是否存在并比较密码:
user = user_map.find { |h| h[:name] == input_username }
#=> {:name=>"bob", :password=>"1234"}
user[:password] == input_password
#=> true
如果Enumerable#find返回非值,请检查密码nil
:用户不存在:
input_username = 'ron'
user = user_map.find { |h| h[:name] == input_username }
user
#=> nil
在您的实施之后,您还可以编写:
login_passed = false
CSV.foreach(data_file, headers: true) do |row|
login_passed = row['name'] == input_username && row['password'] == input_password
break if login_passed
end
login_passed
#=> true (or false)
推荐阅读
- javascript - ngModel 不会在来自字符串的输入上呈现
- assembly - x86中的jmpl指令是什么?
- node.js - AWS API Gateway“不支持的方法\”未定义\“”作为响应
- php - 使用 php 从数据库中的所有数据创建 json
- python - Python Turtle:是否可以在填充命令中使用图层
- python-3.x - 我可以使用 python 'socket' 模块来监听我的外部 IP 吗?如果没有,是否有预装的模块可以?
- android - Firebase onVerificationCompleted 从 1 月 10 日起不再调用
- java - 读取 csv 文件时 Java 堆错误内存超出范围
- java - 为什么 Room 观察者会一遍又一遍地将同一个实体添加到数据库中?
- java - Xamarin KeyStore PasswordProtection 字段