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

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

Это для файлов субтитров srt. Таймкоды в формате HH.MM.SS,mmm. Файлы содержат другие числа (например, в шестнадцатеричных цветах), поэтому я хочу искать только числа в определенном формате временного кода.

У меня уже есть функция для ввода времени ввода в секундах и возврата времени вывода в секундах. Также должно быть достаточно легко конвертировать между форматом «временного кода» и временем в секундах.

Это пример текстового файла:

1
00:00:00,000 --> 00:00:09,138
<font color="#CCCCCC">alexxa</font><font color="#E5E5E5"> who's your favorite president</font>

2
00:00:04,759 --> 00:00:12,889
<font color="#E5E5E5">George Washington</font><font color="#CCCCCC"> has my vote Alexa</font>

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

1 Ответ

1 голос
/ 26 апреля 2019

Учитывая, что это текстовый формат, наиболее эффективным способом сопоставления (и замены) формата отметок времени в вашем файле будет использование регулярных выражений: https://en.cppreference.com/w/cpp/regex

Алгоритм вы бы хотели: вы читаете построчно из вашего исходного файла, для в каждой строке чтения, где совпадает RE, вы заменяете ее новыми временными метками (то есть создаете новую строку) и выводите в новый файл (или в буфер, который позже может быть передан в исходный файл - после завершения обработки) , Другие строки (где RE не совпадает) вы выводите без изменений, поскольку они были прочитаны.

...