Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Space on April 17, 2019, 11:18:12 PM
-
Копируются два числа с запятыми 123,45 и 678,91
После назначения двух переменных командами DEFINE из буфера, два числа остаются также с запятыми. Нужно выполнить арифметическое действие (123,45+678,91)/2
Если вместо запятой изначально стоит точка, то вычисление произойдет. А так как копируется только с запятой, то и вычисление не происходит.
==========================================
с запятой копированные из браузера
лог файлы
19:10:54 123,45 - h1 переменная
19:10:54 678,91 - h2 переменная
19:10:54 --- ("123,45"+"678,91")/2 -- результат---
=============================================
если назначаем переменные из заранее подготовленных чисел, но с ТОЧКОЙ
лог файлы
19:10:54 123.45 - h1 переменная
19:10:54 678.91 - h2 переменная
19:10:54 401.18 -- результат---
===========================================
если назначаем переменные из заранее подготовленных чисел, но с ЗАПЯТОЙ
также вычисляет, причем в переменной запятая становится точкой
скрипт $h1 = 123,45
скрипт $h2 = 678,91 // заранее подготовленные с !запятой
лог 19:17:14 123.45 - h1 переменная до вычисления !с точкой
лог 19:17:14 678.91 - h2 переменная до вычисления !с точкой
скрипт $E=($h1+$h2)/2+0.1 // вычисления
лог 19:17:14 401.28 -- результат---
лог 19:17:14 123.45 --после вычисления h1 переменная
лог 19:17:14 678.91 --после вычисления h2 переменная
А с копированием из браузера - не становится точкой
============================================
Не могу разобраться, как решить эту головоломку? Изначально пробовал прибавлением времени, т.к. весь скрипт пролетает за 1 сек. Но оказалось не там копал и после расстановки по цепочке этажерки из команд - LOGWRIT понял, что дело кроется в запятой.
Или как заменить запятую на точку?
-
....
Или как заменить запятую на точку?
Самым верным вариант - функция STRREPLACE, которая возвращает результирующую строку, в которой искомая подстрока заменяется на другую строку.
$h1 = "123,45"
$h2 = "678,91"
$h1 = STRREPLACE ($h1, ",", ".") // заменяем запятую на точку
$h2 = STRREPLACE ($h2, ",", ".")
print($h1 + $h2) //работает
halt
Но у меня чегото не клеилось по началу, я подумал что STRREPLACE не функция :-[, и результат не получался.... По этому нагородил еще кучку костылей :D :
$h1 = "123,45"
$h2 = "678,91"
$pos = STRPOS ($h1, ",")
IF($pos > 1)
$h1 = STRFILTER ($h1, ",", 0)
$h1 = STRCONCAT(STRCUT2($h1,1,$pos-1),".",STRCUT2($h1,$pos, STRLEN ($h1)))
END_IF
IF($pos > 1)
$pos = STRPOS ($h2, ",")
$h2 = STRFILTER ($h2, ",", 0)
$h2 = STRCONCAT(STRCUT2($h2,1,$pos-1),".",STRCUT2($h2,$pos, STRLEN ($h1)))
END_IF
print($h1 + $h2) //работает
////////////////////////////////////////////
$h1 = "123,45"
$h2 = "678,91"
STRSEPARATE ($h1, ",", $arr1)
IF(arrsize($arr1) = 2)
$h1 = $arr1[0] + $arr1[1]/POW(10,STRLEN($arr1[1]))
END_IF
STRSEPARATE ($h2, ",", $arr2)
IF(arrsize($arr2) = 2)
$h2 = $arr2[0] + $arr2[1]/POW(10,STRLEN($arr2[1]))
END_IF
undefine($arr1)
undefine($arr2)
print($h1 + $h2) //работает
////////////////////////////////////////////
$h1 = "123,45"
$h2 = "678,91"
STRSEPARATE ($h1, ",", $arr1)
IF(arrsize($arr1) = 2)
$h1 = STRCONCAT($arr1[0], ".", $arr1[1])
END_IF
STRSEPARATE ($h2, ",", $arr2)
IF(arrsize($arr2) = 2)
$h2 =STRCONCAT($arr2[0], ".", $arr2[1])
END_IF
undefine($arr1)
undefine($arr2)
print($h1 + $h2) //работает
halt
-
Спасибо! Варианты попробую.
-
Все отлично вычисляет! Спасибо!
Скрипт - проверка работы вычисления
TOCLIP("") // Очистить буфер
/////// копирование /////
LCLICK(1253,82) // жм.кн. перекл.
WAITMS(100)
LCLICK(1173,224)// жм.кн. -G
WAITMS(150)
LCLICK(1217,172) // копируем
WAITMS(50) //
KEYDOWN(#CTRL) //
WAITMS(50) //
KEYPRESS(#a) //
WAITMS(50) //
KEYPRESS(#c) //
WAITMS(50) //
KEYUP (#CTRL) //
WAITMS(50)
DEFINE($h1, FROMCLIP()) // DEFINE Объявляет переменную и присваивает ей значение из FROMCLIP который возвращает строку, находящуюся в буфере обмена
WAITMS(50)
LCLICK(1173,166) //жм.кн -R
WAITMS(50)
LCLICK(1217,172) // копируем
WAITMS(50) //
KEYDOWN(#CTRL) //
WAITMS(50) //
KEYPRESS(#a) //
WAITMS(50) //
KEYPRESS(#c) //
WAITMS(50) //
KEYUP (#CTRL) //
WAITMS(50) //
DEFINE($h2, FROMCLIP()) //
WAITMS(50)
LOGWRITE($h1, " - $h1 до преобразования зпт в тчк")
LOGWRITE($h2, " - $h2 до преобразования зпт в тчк")
//////// преобразование зпт в тчк /////////
$pos = STRPOS ($h1, ",")// Возвращает позицию начала искомой подстроки во входной строке.
IF($pos > 1)
$h1 = STRFILTER ($h1, ",", 0)// Возвращает строку, из которой удаляются определенные символы.
$h1 = STRCONCAT(STRCUT2($h1,1,$pos-1),".",STRCUT2($h1,$pos, STRLEN ($h1)))// STRCONCAT Возвращает объединенную строку, состоящую из других строк.STRCUT Возвращает подстроку из входной строки. STRLEN Возвращает длину входной строки в символах
END_IF
IF($pos > 1)
$pos = STRPOS ($h2, ",")
$h2 = STRFILTER ($h2, ",", 0)
$h2 = STRCONCAT(STRCUT2($h2,1,$pos-1),".",STRCUT2($h2,$pos, STRLEN ($h1)))
END_IF
LOGWRITE($h1, " - $h1 до вычисления- ")
LOGWRITE($h2, " - $h2 до вычисления- ")
WAITMS(100)
$q=($h1+$h2)/2+0.1 // вычисления
WAITMS(50)
LOGWRITE(" --- ", $q, " --РЕЗУЛЬТАТ--- ")
HALT
-
Чем тебе STRREPLACE не понравилось?
TOCLIP("") // Очистить буфер
/////// копирование /////
LCLICK(1253,82) // жм.кн. перекл.
WAITMS(100)
LCLICK(1173,224)// жм.кн. -G
WAITMS(150)
LCLICK(1217,172) // копируем
WAITMS(50) //
KEYDOWN(#CTRL) //
WAITMS(50) //
KEYPRESS(#a) //
WAITMS(50) //
KEYPRESS(#c) //
WAITMS(50) //
KEYUP (#CTRL) //
WAITMS(50)
$h1 = STRREPLACE (FROMCLIP(), ",", ".")
WAITMS(50)
LCLICK(1173,166) //жм.кн -R
WAITMS(50)
LCLICK(1217,172) // копируем
WAITMS(50) //
KEYDOWN(#CTRL) //
WAITMS(50) //
KEYPRESS(#a) //
WAITMS(50) //
KEYPRESS(#c) //
WAITMS(50) //
KEYUP (#CTRL) //
WAITMS(50) //
$h2 = STRREPLACE (FROMCLIP(), ",", ".")
$q=($h1+$h2)/2+0.1 // вычисления
LOGWRITE(" --- ", $q, " --РЕЗУЛЬТАТ--- ")
HALT
-
Варианты от dramster все хороши. Проверив один из вариантов, сразу решил поблагодарить человека.
Чем больше на форуме находишься, тем больше поражаешься находчивостью и кратким решением задач - завсегдатаев форума. Спасибо!
Так-же благодарю Oraven, за оригинальные подсказки. Этот вариант с применением STRREPLACE о котором упоминал выше dramster работает быстрее!