2015-04-23 3 views
-1

Я пытаюсь сгруппировать некоторые данные на основе даты, затем добавьте эти данные вместе и выплюнуть их в базу данных или таблицу рельсов указанной датой в десятичной форме.Данные о расщеплении расписания по дате

E.G. Я хочу взять эту

8 hrs, 38 mins 6:51am 3:30pm Apr 18 
3 hrs, 44 mins 11:47am 3:32pm Apr 17 
4 hrs, 23 mins 6:58am 11:20am Apr 17 

и вернуть

8.51 Apr 18 
8.12 Apr 17 

и так далее.

Разделить данные отдельно должно быть легко, используя .to_string.split(), но я не уверен, как сгруппировать его. В идеале кто-то мог бы скопировать все часы в течение месяца и вернуть его.

+2

Что у пытался до сих пор? – lcguida

+0

Покажите нам, что вы пробовали до сих пор. Таким образом, мы можем помочь исправить ваш код, а не писать что-то с нуля, которое совершенно не связано. –

ответ

1

Вы можете сделать это таким образом:

a = ["8 hrs, 38 mins 6:51am 3:30pm Apr 18", 
    "3 hrs, 44 mins 11:47am 3:32pm Apr 17", 
    "4 hrs, 23 mins 6:58am 11:20am Apr 17"] 

R =/
    (\d+) # capture first group of digits 
    \shrs,\s # match ' hrs, ' 
    (\d+) # capture second group of digits 
    \smins\s # match ' mins ' 
    \S+\s # match any number of non-ws chars followed by one ws char 
    \S+\s # repeat 
    (.+)  # capture remaining text 
    /x  

a.map do |s| 
    h,m,d = s.scan(R).first 
    "#{(h.to_f+(m.to_f/60)).round(2)} #{d}" 
end 
    #=> ["8.63 Apr 18", "3.73 Apr 17", "4.38 Apr 17"] 

Для:

s = "8 hrs, 38 mins 6:51am 3:30pm Apr 18" 

шаги заключаются в следующем:

b = s.scan(R) 
    #=> [["8", "38", "Apr 18"]] 
h,m,d = b.first 
    #=> = ["8", "38", "Apr 18"] 
h #=> "8" 
m #=> "38" 
d #=> "Apr 18" 
c = h.to_f+(m.to_f/60) 
    #=> 8.0 + (38.0/60) 
    #=> 8.633333333333333 
e = c.round(2) 
    #=> 8.63 
"#{e} #{d}" 
    #=> "8.63 Apr 18" 
Смежные вопросы