Написал новую программу и...

о, тормоз! Она работает минут 5!
Подскажите, как её оптимизировать.
Язык Visual Basic 5.0. Операционная система Windows 95. Процессор Celeron 333.
Логика вся правильная, проверял. Для моего случая подходит.

Написал новую программу и... - 872355686631
Написал новую программу и... - 872355691495
Rem Shift time
Rem Язык Visual Basic 5.0
Rem Смещение тайминга субтитров *.srt

Option Explicit

Private Sub C1_Click()
Dim a As String: Rem - Буферный массив хранения символов
Dim b, c, d, e As String

Dim g As Long: Rem - Указатель на считываемый символ
Dim h As Long: Rem - Время смещения в миллисекундах
Dim i As Long: Rem - Смещаемое время в миллисекундах
Dim j, k, l, m As Long

Rem - Инициализация
g = 1
h = Val(T2) * 1000
T3 = ""

10 Rem - Цикл обработки данных блока T1
a = Mid(T1, g, 12)
If Mid(a, 3, 1) = ":" And Mid(a, 6, 1) = ":" And Mid(a, 9, 1) = "," Then
Rem - Собираем из строки число
b = Mid(a, 1, 2)
c = Mid(a, 4, 2)
d = Mid(a, 7, 2)
e = Mid(a, 10, 3)

i = ((b * 60 + c) * 60 + d) * 1000 + e
i = i + h
If i < 0 Then i = 0

Rem - Разбираем число на строку
m = i
l = m \ 1000: m = m - l * 1000
k = l \ 60: l = l - k * 60
j = k \ 60: k = k - j * 60

If j < 10 Then T3 = T3 & "0"
T3 = T3 & j & ":"
If k < 10 Then T3 = T3 & "0"
T3 = T3 & k & ":"
If l < 10 Then T3 = T3 & "0"
T3 = T3 & l & ","
If m < 100 Then T3 = T3 & "0"
If m < 10 Then T3 = T3 & "0"
T3 = T3 & m

g = g + 12
Else
T3 = T3 + Mid(a, 1, 1)
g = g + 1
End If

Rem - Если блок T1 не закончился, то повторение цикла
If Len(a) > 11 Then GoTo 10
T3 = T3 + Mid(a, 2, 10)
End Sub

Комментарии

  • 11 сен 2018 10:17
    Хотел бы помочь, но... переменные с именами a,b,c и т.п. очень быстро отбили желание разбираться что к чему. Тут много расчетов и потому что бы понять формулу приходится постоянно вспоминать что же значит очередная переменная. Я не компьютер, не могу (да и не хочу) держать все переменные в голове. Было бы проще если переменные имели осмысленные имена, тогда формулу можно было бы просто причитать. А так же есть подозрения, что ошибка как раз в этом. Вы просто где то перепутали свои abc. :-)
  • 11 сен 2018 10:18
    Ну в общем задачка мне показалась интересной хоть и тривиальной. Что же, потратил час времени и написал свой вариант:
  • 11 сен 2018 10:22
    Можете посмотреть как решил эту задачу я. Правда код на Delphi. Ну и не стал я его сильно оптимизировать, что бы было понятней.
    https://drive.google.com/open?id=1n3C4mODzuICusItGDZPMxGgeJp7rwr_u
  • 11 сен 2018 10:23
    Да, я немного добавил функционала: сдвиг времени возможен в оба направления.
  • 11 сен 2018 15:55
    Понятно.
    Терпеть не могу списывать, если могу сделать сам.
    У меня есть аналогичная программа, консольное приложение на Visual C++ 9. Но там я сделал только на целое число секунд. Поэтому захотел переделать, но плохо получилось...
  • 11 сен 2018 18:28
    Никто не призывает к списыванию ) Просто делюсь своим решением.
    Вообще если вы решаете задачу сугубо в академических целях, то это одно дело. Но если вам нужно практическое решение быстро, то совсем не обязательно заниматься математикой времени. Обычно стандартная библиотека уже содержит много полезных функций работы со временем. Уверен, что и в вашей версии бэйсика тоже есть такие.
    з.ы.: Читать чужой код очень полезно. Это тоже такая форма обучения. Вы можете подсмотреть какой то трюк и взять на вооружение. Это не значит что вы списали. Это значит вы научились использовать новый для себя инструмент.
  • 12 сен 2018 17:28
    Да у меня душа рвётся к творчеству, только абсолютно нет задач, которые нужно делать. Я читаю учебник программирования. Сегодня решил две задачи, но они простенькие, на уровне (2 + 2) * 5. Какая тут нагрузка на мозг? А инструмент - Visual Basic 5.
  • 12 сен 2018 17:33
    Вот эта вот программа в начале - она считается "большой", хоть и занимает всего 1 страницу кода. Делал я её в два этапа. В первый день спроектировал саму форму, всё разрисовал. Во второй день написал сам код, который преобразует. Это было в новинку.
  • 12 сен 2018 17:36
    Как вариант, могу посоветовать пройтись по сайтам фриланса. Посмотреть что заказывают люди и попробовать сделать.
  • 12 сен 2018 17:37
    так же можно взять какую то программу, которой вы пользуетесь и попробовать ее повторить. Ну или сделать лучше на ваш взгляд.
  • 12 сен 2018 17:37
    Весь мир не перерешать. Поэтому ограничиваюсь книгами - они конечны.
  • 12 сен 2018 17:38
    Зачем же весь мир. На сайтайх фриласна, конкретные люди, просят сделать им конкретную задачу. Как правило это не очень большие задачи. На вроде свести 10 файлов эксель в один. Или сделать парсер сайта.