Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: 123 on February 08, 2020, 04:21:24 PM
-
Надо время, упомянутое в предложении, перевести в секунды. В зависимости от указанного в нём времени, предложение может быть в нескольких вариантах, примеры:
"... через 11 мин. 11 с."
"... через 11 мин. 1 с."
"... через 1 мин. 11 с."
"... через 11 с."
"... через 1 с."
-
$str = "... через 1 мин. 11 с."
$count = STRPOS($str, "через")
IF($count > 0)
$str2 = STRFILTER(STRCUT2($str, $count+6, STRLEN($str)), " ", 0)
$count2 = STRPOS($str2, "мин.")
IF($count2 > 0)
$m = STRCUT2($str2, 1, $count2-1)
$str2 = STRCUT2($str2, $count2+4, STRLEN($str2))
$count2 = STRPOS($str2, "с.")
$s = 0
IF($count2 > 0)
$s = STRCUT2($str2, 1, $count2-1)
END_IF
$str = STRCONCAT(STRCUT2($str, 1, $count+5), ($m*60)+$s, " с.")
END_IF
END_IF
LOGWRITE ($str)
-
Вроде всё как можно проще и предусмотрено для разного количества цифр.
Но извлечение секунд должно быть раньше, т.к. они всегда есть, а минут нет, когда времени осталось меньше одной минуты:
"... через 11 с."
"... через 1 с."
Иначе при любых значениях меньше одной минуты получается ноль секунд.
-
// D М И Н С .
// 0 1 2 3 4 5
//
// STATE 0 0 0 0 0 0 1
// 1 0 0 0 2 S 0
// 2 0 0 3 0 0 0
// 3 0 M 0 0 0 0
//
// ОК ОК ОК ОК
$input_str = "... через нананана 1 с. 4543 ммин 1 мин. 499999 си. 05 мин. 1000 дин. 1000 с."
$lenght = STRLEN($input_str)
STRSEPARATE("0:0:0:0:0:1:0:0:0:2:99:0:0:0:3:0:0:0:0:40:0:0:0:0", ":", $array_state)
WHILE($lenght >= $i)
skip_space:
$char = STRCUT($input_str, $lenght - $i, 1)
INC($i)
IF($char = " ")
GOTO(skip_space)
END_IF
IF($state < 4)
SWITCH($char)
CASE("м")
$char = 1
CASE("и")
$char = 2
CASE("н")
$char = 3
CASE("с")
$char = 4
CASE(".")
$char = 5
DEFAULT
$char = 0
END_SWITCH
$state = $array_state[$state*6+$char]
ELSE
$char = CODE($char)
IF( ($char >= #0) and ($char <= #9) )
$time = (CHAR($char)*POW(10, $k)*(100-$state)) + $time
INC($k)
ELSE
$state = 0
$k = 0
$i = $i - 1
END_IF
END_IF
END_CYC
PRINT($time)
HALT
02:17:51 1361