0

JumpStart Labs Event Manager、特に時間帯/曜日のターゲティングに取り組んでいますが、問題が発生しています。ターミナルで次のコードを実行すると、次のエラー [編集] が表示されます。

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)
}
4

2 に答える 2

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
于 2013-05-03T04:34:23.837 に答える
0

CSV::openコンストラクトを使用しているドキュメントから:

open( filename, options = Hash.new )

だからあなたは行:

contents = CSV.open 'event_attendees.csv', headers: true, header_converters: :symbol2 番目のパラメータ以降はHash. したがって、次のように変更します。

contents = CSV.open('event_attendees.csv', {headers: true, header_converters: :symbol})
于 2013-05-01T20:05:41.573 に答える