
Tenho um documento que é a transcrição de uma entrevista em vídeo. O vídeo em si possui timecode SMPTE incorporado, bem como timecode gravado (BITC). O timecode SMPTE e o BITC correspondem ao horário do dia em que a entrevista foi filmada, no formato 24 horas.
No documento de transcrição, há carimbos de data/hora entre colchetes a cada dois minutos, no [hh:mm]
formato. No entanto, esses carimbos de data/hora de transcrição começam em '00:00'.
Existe uma maneira de usar um tipo de função "Pesquisar e Substituir" para percorrer o documento, encontrar todas as instâncias hh:mm
e adicionar um horário fixo a esses carimbos de data e hora, refletindo assim a hora do dia, correspondendo ao código de tempo SMPTE?
A solução perfeita seria uma ferramenta que:
- Encontra todos os carimbos de data/hora no
[hh:mm]
formato - Adiciona a hora de início da entrevista, "yy:yy" no formato de 24 horas a todos os carimbos de data/hora originais, "xx:xx".
- Substitui os carimbos de data/hora pelo novo carimbo de data/hora corrigido, "zz:zz", que seria igual a xx:xx+yy:yy.
Por exemplo, se minha entrevista começasse às 9h30 da manhã, cada carimbo de data/hora seria substituído da seguinte maneira:
- 00:00 + 9:30 = 9:30
- 00:02 + 9:30 = 9:32
- 00:04 + 9:30 = 9:34
- Etc.
Responder1
Duvido que esta seja a melhor maneira de fazer isso, mas aqui está uma solução. Obviamente, não é muito polido, pois não tenho certeza de como você investirá no incremento de tempo ou se os dados são apenas um parágrafo em uma célula, mas isso deve levar você até lá.
Ele divide o valor da célula ativa em uma matriz procurando por "[", em seguida, ajusta os 2 primeiros caracteres em incrementos de hora e os caracteres 4 e 5 em incrementos de minutos e, em seguida, reúne tudo novamente.
Além disso, isso funciona na célula ativa, o que não é uma prática de codificação muito boa.
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