У меня есть эта форма ввода строки:
002 0000 A C 00:00:20:01 00:00:31:23 00:01:29:24 00:01:41:21
Из предыдущего вопроса я могу захватить его с помощью:
Set re = New RegExp
re.Pattern = "C (\d{2}:\d{2}:\d{2}:\d{2}) (\d{2}:\d{2}:\d{2}:\d{2})"
matches = re.Execute(prev)
Теперь у меня есть 2 подспаривания, которые мне нужно выполнить арифметику на,
Как я могу разделить каждое совпадение на список пар цифр, разделенных символом ":" в список (не уверен в термине?)?
Эти строки являются временными метками, которые я хочу разложитьвплоть до количества кадров.
Я ожидал преобразовать временный код в 25 кадров в секунду:
- 1-я пара - это часы с базовым временем кадра (25 кадров в секунду) 1 час = 1 * 60 * (60 * 25) = 9000
- 2-я пара - это минуты до базового времени кадра (25 кадров в секунду) 1 минута = 1 * (60 * 25) = 1500
- 3-я пара - это секунды до базового времени кадра (25 кадр / с) 1 секунда = 1 * 25f
Например, подкадр 00: 02: 20: 01 будет преобразован в 3501 кадров
Предыдущий Вопрос для справки
РЕДАКТИРОВАТЬ Вот что я закончил.Я должен был найти разницу (datediff) между значениями времени, которые возвращали ответ в «секундах», затем я конвертировал это в формат времени с помощью timeserial.Но к нему добавились часы AM / PM, поэтому я установил регион сценариев в Германию, которая отключает суффикс AM / PM.
Option Explicit
'change system location to Germany, to simulate 24hour clock *no AM PM time
setlocale "de-de"
'TBA read whole data doc to grab the NameDetails and TC
Dim TC
'temporary data set, I will need to send each line to this search
TC ="002 0000 A C 00:00:20:01 00:00:23:23 00:01:29:24 00:01:41:21"
'Define search terms for each timecode element *this is not a result yet
Dim re1
re1 =".*?" 'Non-greedy match on filler
Dim re2
re2 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" 'HourMinuteSec 1
Dim re3
re3 =".*?" 'Non-greedy match on filler
Dim re4
re4 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" 'HourMinuteSec 2
Dim re5
re5 =".*?" 'Non-greedy match on filler
Dim re6
re6 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" 'HourMinuteSec 3
Dim re7
re7 =".*?" 'Non-greedy match on filler
Dim re8
re8 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" 'HourMinuteSec 4
'add timecode search terms to a search pattern
Dim r
Set r = New RegExp
r.Pattern = re1+re2+re3+re4+re5+re6+re7+re8
r.IgnoreCase = True
Dim m, timeDur, ts, Timeofday
Set m = r.Execute(TC)
'loop through timecodes to find duration between first 2 entries
If m.Item(0).SubMatches.Count > 0 Then
Dim time1
time1=m.Item(0).SubMatches.Item(0)
Dim time2
time2=m.Item(0).SubMatches.Item(1)
Dim time3
time3=m.Item(0).SubMatches.Item(2)
Dim time4
time4=m.Item(0).SubMatches.Item(3)
'find duration/difference between first 2 times, in seconds
timeDur=datediff("s", time1, time2)
'format result to a serial time format eg. 00:00:00
ts = TimeSerial(0, 0, timeDur)
'print duration result, will need to append track info and repeat. Then save to file
MsgBox (ts)
End If