2013-05-01 28 views
0

我正在研究JumpStart實驗室事件管理器,特別是每週定位的時間/日期,我遇到了麻煩。當我運行通過終端下面的代碼,它給了我下面的錯誤[編輯]:JumpStart實驗室事件管理器:語法錯誤,意外的':'

austin-winslows-macbook-4:event_manager HypnoBoy$ ruby event_manager.rb 
event_manager.rb:8: odd number list for Hash 
...vent_attendees.csv', {headers: true, header_converters: :sym... 
         ^
event_manager.rb:8: syntax error, unexpected ':', expecting '}' 
...vent_attendees.csv', {headers: true, header_converters: :sym... 
         ^
event_manager.rb:8: Can't assign to true 
...ttendees.csv', {headers: true, header_converters: :symbol}) 
         ^
event_manager.rb:8: syntax error, unexpected ':', expecting '=' 
...ders: true, header_converters: :symbol}) 

我已經發布了我下面的代碼,並正在尋找的建議!關於語法的東西顯然是關閉的,但是我到目前爲止已經按照這封信的步驟進行了操作,並且沒有遇到任何問題,所以我不知道再去看看。任何幫助將是一個很大的幫助,謝謝!

require 'csv' 
require 'sunlight/congress' 
require 'erb' 
require 'date' 


Sunglight::Congress.api_key = "e179a6973728c4dd3fb1204283aaccb5" 
contents = CSV.open('event_attendees.csv', {headers: true, header_converters: :symbol}) 


def clean_zipcode(zipcode) 
zipcode.to_s.rjust(5,"0")[0..4] 
end 


def clean_phone(number) 
number.to_s.rjust(10,"0")[0..4] 
end 


def legislators_by_zipcode(zipcode) 
Sunglight::Congress::Legislator.by_zipcode(zipcode) 
end 


def peak_days 
time = row[:regdate] 
day_array = [] 
time.each { |t| 
    array << Datetime.strptime(t, '%m/%d/%Y %H:%M').wday } 
end 

def peak_hours 
time = row[:regdate] 
hr_array = [] 
time.each { |t| 
     array << DateTime.strptime(t, '%m/%d/%Y %H:%M').hour } 
array 
end 


def save_thanks_you_letters(id,form_letter) 
Dir.mkdir("output") unless Dir.exists? "output" 

filename = "output/thanks_#{id}.html" 

File.open(filename, 'w') { |file| 
    file.puts form_letter} 
end 


puts "EventManager Initialized!" 

template_letter = File.read "form_letter.erb" 
erb_template = ERB.new template_letter 

contents.each { |row| 
id = row[0] 

name = row[:first_name] 

zipcode = clean_zipcode(row[:zipcode]) 

phone = clean_phone(row[:homephone]) 

legislators = legislators_by_zipcode(zipcode) 

form_letter = erb_template.result(binding) 

save_thank_you_letters(id,form_letter) 
} 
+1

給出完整的錯誤堆棧 – 2013-05-01 19:47:48

+1

的問題可能是你的參數:開放是模糊Ruby解釋。你可以嘗試將它們明確寫出來,如下所示:contents = CSV.open('event_attendees.csv',{headers:true,header_converters::symbol}) – hlh 2013-05-01 19:51:00

回答

0

從DOC CSV::open您正在使用的結構:

open(filename, options = Hash.new) 

所以你行:

contents = CSV.open 'event_attendees.csv', headers: true, header_converters: :symbol是錯的,從前進第二個參數是期待Hash。因此將其更改爲:

contents = CSV.open('event_attendees.csv', {headers: true, header_converters: :symbol}) 
+1

在Ruby中,我們允許離開散列IF這是最後一個參數......但我同意這是一個情況,最好是明確的 – hlh 2013-05-01 20:17:30

+0

'+ 1'你是正確的。 – 2013-05-01 20:23:22

+0

我提出了建議的更改,但現在我收到了多個錯誤。編輯內容包含在上面。有什麼建議麼? – Austintacious1 2013-05-01 21:35:05

0

我今天完成了此練習。我不必更改內容= CSV.open行。造成我錯誤的原因是日期未在Excel文件中格式化。我在Excel中將日期列格式化爲mm/dd/yyyy hh:mm。在'%m /%d /%Y%H:%M'字符串中,大寫似乎也很重要 - 我使用了小寫字母'y'。

這是我第一次練習的樣子:

# Iteration: Time Targeting 
contents = CSV.open "event_attendees.csv", headers: true, header_converters: :symbol 

regtimes = Array.new(25, 0) 

contents.each do |row| 

    reghour = DateTime.strptime(row[:regdate],'%m/%d/%y %H:%M').hour 

    regtimes[reghour] += 1 

end