如何在文档中的所有“hh:mm”字符串中添加固定的时间量?

如何在文档中的所有“hh:mm”字符串中添加固定的时间量?

我有一份文件,是一段视频采访的记录。视频本身嵌入了 SMPTE 时间码和刻录时间码 (BITC)。SMPTE 时间码和 BITC 对应于采访拍摄的时间,采用 24 小时制。

在转录文档中,[hh:mm]格式为每两分钟一个方括号内的时间戳,但这些转录时间戳都是从‘00:00’开始的。

有没有办法使用一种“搜索和替换”功能来浏览文档,找到所有实例hh:mm并为这些时间戳添加固定时间,从而反映一天中的时间,与 SMPTE 时间码相匹配?

完美的解决方案应该是一个能够:

  1. [hh:mm]查找格式的所有时间戳
  2. 将采访开始时间“yy:yy”(24 小时格式)添加到所有原始时间戳“xx:xx”。
  3. 用新的、更正的时间戳“zz:zz”替换时间戳,其等于 xx:xx+yy:yy。

例如,如果我的采访在早上 9:30 开始,则每个时间戳将按以下方式替换:

  1. 00:00 + 9:30 = 9:30
  2. 00:02 + 9:30 = 9:32
  3. 00:04 + 9:30 = 9:34
  4. ETC。

答案1

我怀疑这是否是最好的方法,但这里有一个解决方案。显然,它不是很完善,因为我不确定您将如何输入时间增量,或者数据是否只是一个单元格中的一个段落,但它应该可以帮您完成大部分工作。

它将活动单元格值拆分成一个数组,寻找“[”,然后根据小时步长向上调整前 2 个字符,根据分钟步长向上调整字符 4 和 5,然后将它们全部重新组合在一起。

这也适用于 activecell,但不是一个很好的编码实践。

Sub update_times()

    Dim sParts() As String
    Dim input_text As String
    Dim output_text As String
    Dim split_on As String
    Dim hours_add As Integer
    Dim minutes_add As Integer
    Dim hours_final As Integer
    Dim minutes_final As Integer

    split_on = "["
    hours_add = 9
    minutes_add = 30
    input_text = ActiveCell.Value

    sParts = Split(input_text, split_on)
    output_text = sParts(0)

    For i = 1 To UBound(sParts)
        hours_final = Left(sParts(i), 2) + hours_add
        minutes_final = Mid(sParts(i), 4, 2) + minutes_add
        'checks to wrap data
        If minutes_final > 59 Then
            hours_final = hours_final + 1
            minutes_final = minutes_final - 60
        End If
        If hours_final > 23 Then
            hours_final = hours_final - 24
        End If
        'put the part back together with the new hour and minutes
        sParts(i) = "[" & Format(hours_final, "00") & ":" & Format(minutes_final, "00") & Right(sParts(i), Len(sParts(i)) - 5)
        'add the part to the final string
        output_text = output_text & sParts(i)
    Next
    ActiveCell.Value = output_text

End Sub

相关内容