0

今日ルビーを学んでいて、ハッシュから単一の要素を抽出することに行き詰まりました。

login1.csv

role,uName,passwd
adm,admin1,a1
mgr,manager,m
user,user1,u1
adm,admin2,a2

ルビコード

def csvIntoHash
  # load csv Into hash
  $table = []
  File.open("logIn1.csv") do|f|
    columns = f.readline.chomp.split(',')
    until f.eof?
      row = f.readline.chomp.split(',')
      row = columns.zip(row).flatten #build hash from array
      $table << Hash[*row]
    end
  end
end
#
#main
csvIntoHash
#pulls all hash elements when role=mgr
puts $table.select {|rEntry| rEntry["role"]=="mgr"} 

role=mgr のときに uName のみを抽出し、それを変数に割り当てるにはどうすればよいですか?

ご協力ありがとうございます。

4

2 に答える 2

0

Coreの CSV ライブラリを調べる必要があります。

ここにある CSV の形式から、マネージャーの情報を本当に取得したい場合uNameは、次の解決策があります。

manager = ""
CSV.read("file.csv").each_with_index do |arr, index|
  role_column = arr.index("role") if index == 0
  if arr[role_column.to_i] == "mgr"
    manager = arr[role_column.to_i + 1]
  end
end

編集:
明らかに、これはCSVシートにマネージャーが1人しかいないことを前提としています。必要に応じて、コードを変更してマネージャーの配列を割り当てることができます。

于 2012-07-09T07:19:05.490 に答える
0

select()配列を返すので、最初の(あなたの場合だけ?)エントリを見てください。これは、作成したハッシュです。

mgrh = $table.select {|rEntry| rEntry["role"]=="mgr"}
mgr_role = mgrh.first["uName"] # => "manager"
于 2012-07-09T03:57:33.087 に答える