1 (изменено: DD, 2015-02-25 12:55:51)

Тема: AHK: Число представить в формате «Часы-Минуты-Секунды»

Имеется ли функция, позволяющая некое число переводить в стандартное время, исходя из цифры 60, например:

0 ---> 00:00:00
1 ---> 00:00:01
3 ---> 00:00:03
5 ---> 00:00:05
7 ---> 00:00:07
9 ---> 00:00:09
11 ---> 00:00:11
13 ---> 00:00:13
15 ---> 00:00:15
17 ---> 00:00:17
17 ---> 00:00:17
20 ---> 00:00:20
22 ---> 00:00:22
24 ---> 00:00:24
25 ---> 00:00:25
28 ---> 00:00:28
33 ---> 00:00:33
36 ---> 00:00:36
38 ---> 00:00:38
41 ---> 00:00:41
41 ---> 00:00:41
44 ---> 00:00:44
47 ---> 00:00:47
49 ---> 00:00:49
53 ---> 00:00:53
55 ---> 00:00:55
58 ---> 00:00:58
61 ---> 00:01:01
62 ---> 00:01:02
65 ---> 00:01:05
67 ---> 00:01:07
70 ---> 00:01:10
72 ---> 00:01:12
74 ---> 00:01:14
76 ---> 00:01:16
78 ---> 00:01:18
81 ---> 00:01:21
83 ---> 00:01:23
85 ---> 00:01:25
88 ---> 00:01:28
...
1022 ---> 00:17:02
1026 ---> 00:17:06

Это я пытаюсь наладить конвертирование субтитров с ютуба (файлы XML) в стандартные.

2

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Можно взять произвольную дату прибавить к ней количество секунд и потом сформатировать время с помощью FormatTime.

+ YMP, DD

3

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Вот так можно:


n := 11822
s := SubStr( "0" Mod(n, 60), -1 )
m := SubStr( "0" Mod(n // 60, 60), -1 )
h := SubStr( "0" n // 3600, -1 )
time := h ":" m ":" s

MsgBox, %time%
+ DD

4

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Да, с FormatTime идея тоже работает:


n := 11822
time = 20140101
time += n, seconds
FormatTime, time, %time%, HH:mm:ss

MsgBox, %time%

5

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Спасибо за идеи и воплощения!

6 (изменено: DD, 2015-02-25 14:34:23)

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Пожалуй, задача сродни первой : как применять к содержимому переменной эти коды? Примерно по такому формату, где цифры в кавычках:

n =
(
ЛюбойТекст="83"ЛюбойТекст
ЛюбойТекст="85"ЛюбойТекст
ЛюбойТекст="88"ЛюбойТекст
)

;n := 88
s := SubStr( "0" Mod(n, 60), -1 )
m := SubStr( "0" Mod(n // 60, 60), -1 )
h := SubStr( "0" n // 3600, -1 )
time := h ":" m ":" s


msgbox % time

Было бы крайне любопытно взглянуть .

7 (изменено: stealzy, 2015-02-25 15:12:46)

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Что вы хотите сделать? Выделить число из текста?
Заменить число на ваш формат?

Loop, parse, n, `n, `r
{
String:=A_LoopField
RegExMatch(String, "\D(\d+)\D", Time)
NewTime:=mySuperPuperFormat(Time)
String:=RegExReplace(String, Time, NewTime)
NewN.=String . "`n"
}
msgbox % NewN

Как оформить mySuperPuperFormat(), расписывать не надо, надеюсь.

8

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Например так:

n =
(
ЛюбойТекст="83"ЛюбойТекст
ЛюбойТекст="85"ЛюбойТекст
ЛюбойТекст="88"ЛюбойТекст
)

pos = 1
while pos := regexmatch(n, ".*?=""(\d+)""", found, pos+StrLen(found))
   msgbox % timecode(found1)

timecode(n)
{
   s := SubStr( "0" Mod(n, 60), -1 )
   m := SubStr( "0" Mod(n // 60, 60), -1 )
   h := SubStr( "0" n // 3600, -1 )
   return, time := h ":" m ":" s
}

9

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Спасибо!

10 (изменено: DD, 2015-02-25 15:31:28)

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Всё-таки не справляюсь. Можно ли сделать, чтобы вывод содержал все строки разом, включая окружающие цифры текст? Например, входной текст такой —

<text start="17">цена на нефть упала до такого минимума что</text>
<text start="20">под угрозу уже оказалась сланцевая</text>
<text start="22">революция в самих соединенных штатов</text>

а вывод такой —

<text start="00:00:17">цена на нефть упала до такого минимума что</text>
<text start="00:00:20">под угрозу уже оказалась сланцевая</text>
<text start="00:00:22">революция в самих соединенных штатов</text>

11

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

SetFormat, FloatFast, 02.0
n =
(
<text start="17">цена на нефть упала до такого минимума что</text>
<text start="20">под угрозу уже оказалась сланцевая</text>
<text start="22">революция в самих соединенных штатов</text>
)

Obj:=StrSplit(n,"""")
for k, v in Obj{
   if !(k&1)
      Obj[k]:="""" Obj[k] // 3600.0 ":" Mod(Obj[k] // 60, 60.0) ":" Mod(Obj[k], 60.0) """"
   Out .= Obj[k]
}
MsgBox % Out
+ DD

12

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

http://savepic.net/6340572.jpg

13

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»


Нашел еще пару-тройку лишних "запчастей" в коде. ))

SetFormat, FloatFast, 02.0
n =
(
<text start="17">цена на нефть упала до такого минимума что</text>
<text start="20">под угрозу уже оказалась сланцевая</text>
<text start="22">революция в самих соединенных штатов</text>
)
for k, v in J:=StrSplit(n,"""")
   (k&1)||J[k]:="""" J[k]//3600.0 ":" Mod(J[k]//60,60.0) ":" Mod(J[k],60.0) """",Out .= J[k]
MsgBox % Out

14 (изменено: Malcev, 2015-02-25 16:51:18)

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Регексом проще и надежней:

n =
(
<text start="17">цена на нефть упала до такого минимума что</text>
<text start="20">под угрозу уже оказалась сланцевая</text>
<text start="22">революция в самих соединенных штатов</text>
)

pos := 1 - StrLen(timecode(found1))
while pos := regexmatch(n, "<text start=""(\d+?)"">", found, pos+StrLen(found)-StrLen(found1)+StrLen(timecode(found1)))
   StringReplace, n, n, %found1%, % timecode(found1)
msgbox % n

timecode(n)
{
   s := SubStr( "0" Mod(n, 60), -1 )
   m := SubStr( "0" Mod(n // 60, 60), -1 )
   h := SubStr( "0" n // 3600, -1 )
   return, time := h ":" m ":" s
}

15 (изменено: Irbis, 2015-02-25 19:49:11)

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Проще - кому, или для чего? Вряд ли массив сложней для понимания, чем RegExp'ы. Тем более если функцию преобразования вынести отдельно.

for k, v in J:=StrSplit(n,"""")
   (k&1)||J[k]:="""" NtoTime(J[k]) """",Out .= J[k]
MsgBox % Out

NtoTime(n) {
   Return (n+0) ? n//(3600.0) ":" Mod(n//60,60.0) ":" Mod(n,60.0) : n
}

Надежней - да, если в тексте есть другие ограниченные кавычками части, нужна дополнительная проверка.

16 (изменено: Malcev, 2015-02-25 19:57:45)

Re: AHK: Число представить в формате «Часы-Минуты-Секунды»

Irbis, а можешь подсказать как сразу с помощью regexreplace сделать?
Так не выходит:

n =
(
<text start="17">цена на нефть упала до такого минимума что</text>
<text start="20">под угрозу уже оказалась сланцевая</text>
<text start="22">революция в самих соединенных штатов</text>
)

msgbox % regexreplace(n, "<text start=""(\d+?)"">", "<text start=""" timecode($1) """>")


timecode(n)
{
   s := SubStr( "0" Mod(n, 60), -1 )
   m := SubStr( "0" Mod(n // 60, 60), -1 )
   h := SubStr( "0" n // 3600, -1 )
   return, time := h ":" m ":" s
}

Чую, что надо использовать RegExCallout, но не пойму как?
http://ahkscript.org/docs/misc/RegExCallout.htm