Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: inilim on June 14, 2018, 06:34:21 PM
-
Английская и русская раскладка. Есть готовое решение?
Поиск не чего не дал.
С уважением.
-
Для версии кликера 4.13
SUB(Cap, $mode, $input_str) // Подпрограмму пишем в начале скрипта до основного кода
IF($first = 0)
$first = 1
STRSEPARATE("А:Б:В:Г:Д:Е:Ё:Ж:З:И:Й:К:Л:М:Н:О:П:Р:С:Т:У:Ф:Х:Ц:Ч:Ш:Щ:Ъ:Ы:Ь:Э:Ю:Я:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z", ":", $arr_cap)
STRSEPARATE("а:б:в:г:д:е:ё:ж:з:и:й:к:л:м:н:о:п:р:с:т:у:ф:х:ц:ч:ш:щ:ъ:ы:ь:э:ю:я:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z", ":", $arr_cap2)
END_IF
$let = $input_str
$let3 = ""
$arrsiz=ARRSIZE($arr_cap)
FOR($i1=1,$i1<=STRLEN($let))
$let2 = STRCUT($let,$i1,1)
$out = 0
FOR($i2=0,($i2<$arrsiz)&($out=0))
IF(($let2 = $arr_cap[$i2]) & (($mode = 3)|($mode = 2))) // Большие в маленькие
$let2 = $arr_cap2[$i2]
$out = 1
END_IF
IF(($let2 = $arr_cap2[$i2]) & (($mode = 3)|($mode = 1))&($out = 0)) // Маленькие в большие
$let2 = $arr_cap[$i2]
$out = 1
END_IF
END_CYC
$let3 = STRCONCAT($let3, $let2)
END_CYC
$let = $let3
END_SUB
// В скрипте в нужном месте вызываем подпрограмму Cap
// Параметры 1 - ВСЕ БУКВЫ БОЛЬШИЕ
// 2 - все буквы маленькие
// 3 - большие в маленькие - маленькие в большие
Cap(1, "Посчитал есть аналог функции как в php mb_strtoupper. Вот как бы) А на форуме поиск не выдает не чего.")
LOGWRITE ($let) // Итоговая строка выводится в переменную $let
HALT
-
Это вы написали для меня? или уже было готовое решение?
В любом случае колоссальное спасибо. :)
-
Это вы написали для меня? или уже было готовое решение?
В любом случае колоссальное спасибо. :)
Для тебя конечно, куда б ты без меня то... ;D
-
Молодец за отсутствия лени, и помощь незнакомцам.
Если бы до завтра не было ответа, я начал бы писать сам. Был уверен что велосипед уже создан)
-
Улучшил алгоритм, теперь работает в разы быстрее
SUB(Cap, $mode, $input_str) // Подпрограмму пишем в начале скрипта до основного кода
IF($first = 0)
$first = 1
$a_let = "А:Б:В:Г:Д:Е:Ё:Ж:З:И:Й:К:Л:М:Н:О:П:Р:С:Т:У:Ф:Х:Ц:Ч:Ш:Щ:Ъ:Ы:Ь:Э:Ю:Я:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z"
$a_let_f = STRFILTER($a_let, ":", 0)
STRSEPARATE($a_let,":",$arr_cap)
STRSEPARATE("а:б:в:г:д:е:ё:ж:з:и:й:к:л:м:н:о:п:р:с:т:у:ф:х:ц:ч:ш:щ:ъ:ы:ь:э:ю:я:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z", ":", $arr_cap2)
$arrsiz=ARRSIZE($arr_cap)
END_IF
$let = $input_str
$let3 = ""
FOR($i1=1,$i1<=STRLEN($let))
$let2 = STRCUT($let,$i1,1)
$str_pos = STRPOS($a_let_f,$let2)
IF($str_pos > 0)
$out = 0
IF(($let2 = $arr_cap[$str_pos-1]) & (($mode = 3)|($mode = 2))) // Большие в маленькие
$let2 = $arr_cap2[$str_pos-1]
$out = 1
END_IF
IF(($let2 = $arr_cap2[$str_pos-1]) & (($mode = 3)|($mode = 1))&($out = 0)) // Маленькие в большие
$let2 = $arr_cap[$str_pos-1]
$out = 1
END_IF
END_IF
$let3 = STRCONCAT($let3, $let2)
END_CYC
$let = $let3
END_SUB
// В скрипте в нужном месте вызываем подпрограмму Cap(режим,строка)
// Параметры 1 - ВСЕ БУКВЫ БОЛЬШИЕ
// 2 - все буквы маленькие
// 3 - БОЛЬШИЕ в маленькие - маленькие в БОЛЬШИЕ
Cap(1, "Тут сТрОкА Текста ИЛИ пЕРЕМЕННАЯ")
LOGWRITE ($let) // Итоговая строка выводится в переменную $let
HALT
-
Не понимаю, почему у меня английскую букву E игорит?
SUB(STRTOUPPER, $input_string)
IF($len_letters != 59)
STRSEPARATE("А:Б:В:Г:Д:Е:Ё:Ж:З:И:Й:К:Л:М:Н:О:П:Р:С:Т:У:Ф:Х:Ц:Ч:Ш:Щ:Ъ:Ы:Ь:Э:Ю:Я:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z", ":", $arraylist_upperLetters)
$len_letters = ARRSIZE($arraylist_upperLetters)
END_IF
FOR($i = 1, $i < STRLEN($input_string) + 1)
$cut = STRCUT($input_string, $i, 1)
$pos = STRPOS("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ", $cut)
IF($arraylist_upperLetters[$pos-1] != $cut)
$input_string = STRCONCAT(STRCUT($input_string, 1, $i-1), $arraylist_upperLetters[$pos-1], STRCUT($input_string, $i+1, STRLEN($input_string)))
END_IF
END_CYC
$return_string = $input_string
END_SUB
STRTOUPPER("test")
PRINT($return_string) // Результат 15:04:45 TeST
HALT
-
Русские буквы подсвечены красным
https://yadi.sk/d/BleDaN8KVlWZYQ
З.Ы. Проблема в 64 битной версии кликера. Но суть проблема не ясна, он почему то не видит разницы между большой и маленькой буквой E
-
Наверно на 64 битах пролазит старая проблема смены типа. Со строки на число.
Пытается преобразовать формат экспоненциальной записи, вроде
2E5 = 2 * 10^5 = 200000
Вот цифр нет, а не E агрится.