Ruby:如果布尔值为true,则从同一行返回first_name(在csv文件中)

时间:2016-09-30 06:40:38

标签: ruby csv

我能够将这个陈述用到某一点,但我想添加另一个结果。如果boolean语句返回true,如何让语句从CSV中的同一行返回一个值(标题为' first_name')?

CSV File for example

draw

2 个答案:

答案 0 :(得分:3)

如果您100%确定csv中的引脚是唯一的,您可以试试这个

def customer_check(user_pin)

  user = CSV.read('customers.csv', headers: true).detect { |row| 
      row['pin'] == user_pin && row['work_here'] == "YES"
  }

  if user
    puts "Welcome back #{user['first_name']}."
    sleep(1.5)
  else
    puts "login failed. Please try again in 3 seconds..."
    sleep(3.0)
    login_start
  end

  navigation_menu

end 

变量user将被初始化为条件为真的.csv的相应行。否则它的值将为零:

  根据{{​​3}}的

detect方法:

     
    

enum 中的每个条目传递给阻止。返回不为false的第一个。如果没有对象匹配,则调用 ifnone 并在指定时返回其结果,否则返回 nil

         

如果没有给出阻止,则返回枚举器。

  

请注意,您可能必须确保row['pin']user_id数据类型匹配,因为它可能以字符串形式出现,在这种情况下您必须row['pin'].to_i == user_pin

答案 1 :(得分:1)

如果boolean语句返回true,如何让语句从CSV中返回同一行(标题为'first_name')的值?

按原样运行代码,Ruby期望最终“结束”并引发此错误:
syntax error, unexpected end-of-input, expecting keyword_end

在代码中添加另一个结尾'end'将导致if x == true块被评估,但是,请注意以下代码中的缩进可以说更清晰。使用this example .csv file,如果Welcome back...,此代码将打印returnx == true名字:

require 'csv'

def customer_check(user_pin)

  x = false

  CSV.read('customers.csv', headers: true).any? do |row|
    x = true if row['customerNo'] == user_pin && row['lastName'] == "Dunbar"
    yellow = row['firstName']
    # The if/else clauses are indented within the CSV.read
    if x                                           # <-- "== true" is redundant
      # puts "Welcome back #{yellow}."             # you can lose "yellow" if you want to
      puts "Welcome back #{row['firstName']}."
      sleep(1.5)
      # return yellow                              # <-- RETURN VALUE
      return row['firstName']                      # <-- RETURN VALUE
    else  
      puts "login failed. Please try again in 3 seconds..."
      sleep(3.0)
      # login_start
    end
  # navigation_menu

  end

end

return_name = customer_check('1')                  # <-- prints "Welcome back John"
puts return_name                                   # <-- "John" is the RETURN VALUE

我不确定您是如何使用login_startnavigation_menu但我希望这有助于回答您的问题。如果有帮助,这是CSV doc