2013-12-23 70 views
3

我使用Ruby Roo來閱讀下面的xls文件。如何在Ruby中爲每個ID創建哈希值

現在我想爲每個studentid這樣做散列。

132 = { "Design" => 6, "English" => 5, "Humanities" => 5, .... } 
134 = { "Design" => 7, "English" => 6, "Humanities" => 6, .... } 
... 
... 

以下是我所做的。它輸出的東西,但我需要建立創建哈希。

require_relative './subcorrelation/version' 
require 'linefit' 
require 'roo' 
myfile='../data/msdataparts.xls' 

workbook = Roo::Excel.new(myfile) 
workbook.default_sheet = workbook.sheets.first 

# Create a hash of the headers so we can access columns by name (assuming row 
# 1 contains the column headings). This will also grab any data in hidden 
# columns. 
headers = Hash.new 
workbook.row(1).each_with_index {|header,i| 
headers[header] = i 
} 

# Iterate over the rows using the `first_row` and `last_row` methods. Skip 
# the header row in the range. 
((workbook.first_row + 1)..workbook.last_row).each do |row| 
    # Get the column data using the column heading. 
    studentid = workbook.row(row) 

    puts "{#studentid}" 
end 

我很欣賞任何輸入。提前致謝。

更新:上述線的輸出。

[132.0, "Design", 6.0, "MYC665", "S2", 7.0] 
[132.0, "English", 5.0, "MYC600", "S2", 7.0] 
[132.0, "Humanities", 5.0, "MYC610", "S2", 7.0] 
[132.0, "Languages", 6.0, "MYJ660", "S2", 7.0] 
[132.0, "Math", 6.0, "MYC620", "S2", 7.0] 
[132.0, "Music", 7.0, "MYC664", "S2", 7.0] 
[132.0, "PE", 6.0, "MYC650", "S2", 7.0] 
[132.0, "Science", 6.0, "MYC630", "S2", 7.0] 
[132.0, "Theatre", 6.0, "MYC661", "S2", 7.0] 
[134.0, "Design", 7.0, "MYC665", "S2", 7.0] 
[134.0, "English", 6.0, "MYC600", "S2", 7.0] 
[134.0, "Humanities", 6.0, "MYC610", "S2", 7.0] 
[134.0, "Languages", 6.0, "MYS610", "S2", 7.0] 
... 
... 

enter image description here

回答

4
hash_of_student_and_grades = ((workbook.first_row + 1)..workbook.last_row).each_with_object({}) do |row,hash| 
    # Get the column data using the column heading. 
    next if workbook.row(row).nil? 
    studentid = workbook.row(row)[0] 
    course = workbook.row(row)[1] 
    grade = workbook.row(row)[2] 
    hash[studentid.to_i] ||= {} 
    hash[studentid.to_i][course] = grade.to_i 
end 

puts hash_of_student_and_grades 

應該給你你想要的哈希值。

+0

謝謝。我剛剛更新了我的帖子。 – shin

+0

更新我的回答 – bjhaid

+0

錯誤:...'塊在

':未定義的方法'[] =' 爲零:NilClass(NoMethodError)從LIB/subcorrelation.rb \t:52:在'每個」 \t從LIB/subcorrelation.rb:52:在'each_with_object' \t from lib/subcorrelation.rb:52:in'
' – shin