Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Axelenz on April 14, 2018, 01:47:32 PM
-
Уважаемые знатоки форума, прошу подсказать, может есть более изящное решение следующей задачи.
Есть массив:
Хорошая, лучшая цена: 10,50 y.e. ед.товара
Только сегодня, цена - 21.39 y.e. за штуку
Купите товар по ц.: 15,7 y. e. в розницу
. . .
необходимо из каждой текстовой строки $price массива данных вырезать только саму цену, т.е. цифры с любыми разделительными знаками между ними.
Вариант
$price = STRFILTER($price,".0123456789,", 1)
не подходит из-за непредсказуемости текста. Подходит только вариант найти первую и последнюю цифры в тексте, а до и после - всё отбросить.
Набросал вот такой код, но может кто подскажет более простой/быстрый вариант, как это лучше реализовать ?
//---------- поиск первой и последней цифры в цене
FOR($na = 1, $na < strlen($price))
$first = $na
IF(STRPOS("0123456789", STRCUT($price, $na, 1)) > 0)
$na = strlen($price)
END_IF
END_CYC
$price = strcut2($price, $first, strlen($price))
FOR($na = strlen($price), $na > 0, -1)
$last = $na
IF(STRPOS("0123456789", STRCUT($price, $na, 1)) > 0)
$na = 0
END_IF
END_CYC
$price = strcut2($price, 1, $last)
//---------------------------------------
-
ARRPUSH($price, "Хорошая, лучшая цена: 10,50 y.e. ед.товара")
ARRPUSH($price, "Только сегодня, цена - 21.39 y.e. за штуку")
ARRPUSH($price, "Купите товар по ц.: 15,7 y. e. в розницу")
FOR($a=0,$a<ARRSIZE($price)) // обрабатываем массив
STRSEPARATE($price[$a], " ", $arr)
FOR($b=0,$b<ARRSIZE($arr))
IF(STRLEN(STRFILTER($arr[$b], ".0123456789,", 0)) = 0)
$price[$a] = $arr[$b]
$b=ARRSIZE($arr)
END_IF
END_CYC
UNDEFINE($arr)
END_CYC
// Вывод массива в лог
FOR($a=0,$a<ARRSIZE($price))
LOGWRITE ($price[$a])
END_CYC
HALT
-
Oraven, спасибо за вариант, а какие плюсы гибкость/скорость даёт использование массива в данном случае ?
Как проверить оба варианта на скорость выполнения ?
Вариант
STRSEPARATE($price[$a], " ", $arr)
не подходит опять же из-за человеческого фактора. Текст может быть написан с ошибками, например без пробелов между цифрами и словами...
Хорошая, лучшая цена:10,50 y.e. ед.товара
Только сегодня, цена - 21.39y.e. за штуку
тогда не получаем желаемый результат... В моём случае правильный результат важнее скорости выполнения, потому, что потом ошибки вылавливать вручную больше времени займёт...
14:58:25 Хорошая, лучшая цена:10,50 y.e. ед.товара
14:58:25 Только сегодня, цена - 21.39y.e. за штуку
14:58:25 15,7
14:58:25 10,50
14:58:25 21.39
14:58:25 15,7
14:58:25 10,50
14:58:25 21.39