Как разобрать текстовый файл и выполнить арифметику со временем в Ruby? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть несколько txt-файлов, таких как этот:

Line1: 10:36
Line2: 12:42
Line3: 14:24
Line4: 18:16

Что мне нужно сделать, это проанализировать файл и выполнить следующую операцию:

(Line2 - Line1) + (Line4 - Line3)

и выразить это во времениформат тоже.

Может кто-нибудь, пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 29 сентября 2019

Давайте сначала создадим тестовый файл.

text =<<~END
Line1: 10:36
Line2: 12:42
Line3: 14:24
Line4: 18:16
END

FName = 'test.txt'
File.write(FName, text)
  #=> 52

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

IO.foreach(FName).with_index.sum do |s,i|
  _, hrs, mins = s.split(/: */).map(&:to_i)
  mins += 60*hrs
  i.even? ? -mins : mins
end
  #=> 358 (minutes)

См. IO :: foreach (который возвращает перечислитель, когда, как здесь, ему не был дан блок), Перечислитель # with_index , Перечислимый # sum , String # split и Массив # карта .Регулярное выражение /: */ гласит: «соответствовать двоеточию, за которым следует ноль или более (*) пробелов.

Чтобы вернуть часы и минуты ([5, 58]), измените end на end.divmod(60).См. Integer # divmod .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...