Автокликер Clickermann :: Форум

Основной раздел => Ошибки => Topic started by: gsukhado on August 16, 2017, 10:29:05 PM

Title: Не срабатывает код на голом месте
Post by: gsukhado on August 16, 2017, 10:29:05 PM
Что-то уже не первый раз глюки с Кликерманом: код может не работать просто на голом месте.
Например, скопировал себе предложенный dramster код http://crapware.aidf.org/forum/index.php?topic=88.msg23101#msg23101
И он не работает. Причем не работает даже на примитивном уровне - не выдает на печать строку 78. А если ее же перенабрать вручную - то строка начинает работать нормально. Причем когда визуально перенабираю - то код полностью идентичный. Что тут не так? Неужели надо вручную перенабирать весь листинг программы, чтобы она заработала?

Еще из последних примеров, в ответ на код :
      $x1 = $tmp_x-26-5
      $y1 = $tmp_y+62-5
      $x2 = $tmp_x+6+3+5
      $y2 = $tmp_y-18+100+10+5
      print("координаты ", $x1, " ", $y1, " ", $x2, " ", $y2)
Выдает распечатку "координаты 31 84 49 28-18+100+10+5"
А после того как вручную еще раз перенабрал строку  $y2 = $tmp_y-18+100+10+5
- стало выдавать "координаты 31 84 49 125"

С чем это может быть связано?
Title: Re: Не срабатывает код на голом месте
Post by: Cleoss on August 17, 2017, 04:03:52 AM
Что значат все эти ""вручную  перенабирать строку?
Title: Re: Не срабатывает код на голом месте
Post by: Oraven on August 17, 2017, 08:49:01 AM
Возможно дело в кодировке после копирования из буфера. С бетта версией 4.13 такого скорее всего не будет. Но там полно других багов, например пустая строка воспринимается как две кавычки.

Title: Re: Не срабатывает код на голом месте
Post by: gsukhado on August 17, 2017, 10:56:51 AM
Что значат все эти ""вручную  перенабирать строку?
Именно дословно и значит: смотрю на экран на имеющуюся строку, и над/под ней набираю ее же еще раз на клавиатуре, визуально полностью идентичную, после чего ранее имевшуюся строку удаляю или прячу как комментарий - и вуаля, код заработал...
Title: Re: Не срабатывает код на голом месте
Post by: gsukhado on August 17, 2017, 11:27:46 AM
Возможно дело в кодировке после копирования из буфера.
Да, однозначно не отловил, но пока впечатление такое, что если цифры или математические знаки (скобки, сложение и т.д.) были в русской раскладке - то высокий шанс что соответствующая строка кликером не воспринимается
Title: Re: Не срабатывает код на голом месте
Post by: Cleoss on August 17, 2017, 01:05:21 PM
набираю ее же еще раз на клавиатуре, визуально полностью идентичную строку
А копипаст я так понимэ не работает?   ???
Title: Re: Не срабатывает код на голом месте
Post by: Vint on August 17, 2017, 01:06:48 PM
Вероятнее всего кодировка, но очень странно всё. Скрипт даже в UTF-8 нормально работает, только русский текст будет неправильно выводить.
Здесь же вероятно, символы заменены похожими, но не с теми кодами.
Ты точно копируешь в редактор кликера и им сохраняешь? Не в сторонний?

Еще из последних примеров, в ответ на код :
      $x1 = $tmp_x-26-5
      $y1 = $tmp_y+62-5
      $x2 = $tmp_x+6+3+5
      $y2 = $tmp_y-18+100+10+5
      print("координаты ", $x1, " ", $y1, " ", $x2, " ", $y2)
Выдает распечатку "координаты 31 84 49 28-18+100+10+5"
А после того как вручную еще раз перенабрал строку  $y2 = $tmp_y-18+100+10+5
- стало выдавать "координаты 31 84 49 125"
Здесь совсем непонятно. Если предположить, что
Code: (clickermann) [Select]
$tmp_x = 62
$tmp_y = 27
то $x1, $y1 считает верно, 31 84
а $x2, $y2 нет.
Даже без учёта того что с кодировкой что-то не то.
31 = x-26-5        x = 62
49 = x+6+3+5    x = 35
x != x
Как это понимать? Или ответ не от этого примера?



Минусы-плюсы набранные на любой раскладке ру/англ  и на основной-доп клавиатуре идентичны.

Вот эта строка "28-18+100+10+5" могла получится, если $tmp_x - строка и версия кликера меньше 4.11
Ну или любой из знаков - не минус, а к примеру короткое тире.

Может ты копируешь из браузера, а там такие чудо настройки стоят, что стилями переделывают минусы в тире?
Title: Re: Не срабатывает код на голом месте
Post by: Vint on August 17, 2017, 01:09:04 PM
А кинь ка файл скрипта, который не работает с подобной ошибкой? Именно файл, не текст.
Вот скопировал в кликер, сохранил, на всякий случай перезапустил переоткрыл и при запуске не работает.

И версия кликермэна какая?


Просто всё очень странно и предполагаю не в кликере дело.
Title: Re: Не срабатывает код на голом месте
Post by: gsukhado on August 17, 2017, 11:40:17 PM
Здесь совсем непонятно. Если предположить, что
Code: (clickermann) [Select]
$tmp_x = 62
$tmp_y = 27
то $x1, $y1 считает верно, 31 84
а $x2, $y2 нет.
Даже без учёта того что с кодировкой что-то не то.
31 = x-26-5        x = 62
49 = x+6+3+5    x = 35
x != x
Как это понимать? Или ответ не от этого примера?
Мог опечататься по конкретным значениям координат когда переносил...

Текущий рабочий пример, с которым пытаюсь разобраться:
взял код отсюда http://crapware.aidf.org/forum/index.php?topic=88.msg23101#msg23101 и вставил в свой скрипт. И не работает. Свой скрипт порезал, оставил только ключевой блок для распознавания, чтобы найти ошибку, и подобавлял скриншотов и Print-ов. Четкий пример - строка 81 (была в исходном коде) не печатает, а сделал строку 80 - из нее в листинг информация выводится.
Скрин окончания листинга прилагается.
Также привожу сделанный скриптом скрин части экрана для распознавания - судя по нему, подпрограмма Lines должна выдавать количество строк не равное нулю.

Да, данный конкретный код копировал с форума в Блокнот, а не напрямую в Кликер. А потом редактировал уже в Кликере. Если это принципиально - попробую напрямую в Кликер сразу.
Версия Кликера - 4.12
Title: Re: Не срабатывает код на голом месте
Post by: Cleoss on August 18, 2017, 12:49:31 AM
А как ещё может выражаться то, что кликер не работает? Ну там не кликает или не находит чего, или что ещё? Или любое может не работать?
Title: Re: Не срабатывает код на голом месте
Post by: Vint on August 18, 2017, 09:30:27 AM
Да, данный конкретный код копировал с форума в Блокнот, а не напрямую в Кликер. А потом редактировал уже в Кликере. Если это принципиально - попробую напрямую в Кликер сразу.
Это не принципиально если редактор настроен правильно. Точнее если его не "сломали".


Так, открыл. Кодировка ANSI всё нормально, а что это за куча пробелов которые вовсе не пробелы?

(http://savepic.net/9728264.png)

Вот подсвечу все одинаковые

(http://savepic.net/9718024.png)

Предположил что это неразрывный "пробел". Точно HEX показывает что символ  xA0  - это неразрывный пробел. У бычного пробела код x20

Вот кто тебе так разбавил код неразрывными пробелами нужно выяснить. Это или твой редактор (кстати какой) или браузер с плагином "украшателем".

Интерпретатор удаляет все пробелы и табы, кроме находящихся в строках. Но видимо не удаляет неразрывные пробелы. Да он и не должен, никто так не делает. Вот и выходит вместо 'print' команда ' print', а такой команды нет. Потому что интерпретатор парсит строку на лексемы или как они там называются... 
И это не только с принтом. Вон даже подсветка на них сломалась, чёрным цветом неопознанные.

Title: Re: Не срабатывает код на голом месте
Post by: Vint on August 18, 2017, 10:06:15 AM
Тест. Запостил.
Набранный код с табами
Code: (clickermann) [Select]
FOR($i=0, $i < 3)
print("")
END_CYC
//строка

Код после автоматической расставки отступов. Табы превратились в обычные пробелы.
Code: (clickermann) [Select]
FOR($i=0, $i < 3)
    print("")
END_CYC
//строка

Code: (clickermann) [Select]
                                //3
Сразу из кликера код во всех редакторах нормальный. (значит не он)

Про копировании с форума в "нормальные" текстовые редакторы типа Notepad++, PSPad, Syn, Geany, SciTE - всё нормально, все пробелы обычные.

(http://savepic.net/9707783.png)


При копировании в MS Word видно, что форум на сериях пробелов меняет на последовательность обычный/неразрывный/обычный/неразрывный/...

(http://savepic.net/9750790.png)


Вывод: на форуме серии пробелов разбавляются неразрывными. Копировать код в редактор кликера или любые другие редакторы для работы с "простым" текстом txt. Они предназначены для кода.
Не копировать в MS WORD с форума. Да никто в здравом уме туда код не копирует.
Title: Re: Не срабатывает код на голом месте
Post by: Axelenz on August 18, 2017, 11:21:08 AM
Quote
С бетта версией 4.13 такого скорее всего не будет. Но там полно других багов, например пустая строка воспринимается как две кавычки.

Чем ни пытался удалить пустые строки из текста - выдаёт "" всё равно. Пришлось использовать костыли в виде

Code: [Select]
   TFDelete("in.txt", 1)
   TFDelete("in.txt", TFCOUNT("in.txt"))

но это не вариант... иногда попадаются и в середине текста пустые строки... Придётся искать аддоны, если есть такие, которые удаляют в браузере пустые строки или скрипт искать...  :(
Кто как выходит с этой ситуации в 4.13 ?

P.S. Как вариант можно загнать каждую строку в элемент массива, потом каждый элемент массива записать в отдельный файл + индекс элемента массива к названию файла, потом проверять не пустой ли этот файл, пустые удалять. Дальше всё это обратно считывать и склеивать ))) Но это как-то криво...

Ещё как вариант
Code: [Select]
IF(STRLEN(STRREADLN("in.txt", 1)) > 2)это убирает пустые строки, но не факт, что в вашей строке не может оказаться пару символов... Хотя для тех, кто точно уверен,что у него все строки укомплектованы текстом больше, чем на пару символов, то вполне нормальное решение... И почему именно 2 символа воспринимается как пустая строка ? Что это за символы ? Может с ними можно как-то решить задачу ? Сам текст я беру с браузера, дальше запись в текстовый файл.


Code: (clickermann) [Select]
         $str = TFCOUNT("in.txt")

         $i = 0
         $txt = "|"
         
         FOR($n = 0, $n < $str)
           
            IF(STRLEN(STRREADLN("in.txt", 1)) > 2)
               $arr[$n] = StrReadln("in.txt", 1)
               WAITMS(100)
               $txt = STRCONCAT($txt, $arr[$n], "|")
               WAITMS(100)
            ELSE
               $n = $n - 1
            END_IF
           
            TFDelete("in.txt", 1)
            WAITMS(100)
           
            INC($i)
            IF($i = $str)
               $n = $str
            END_IF
           
         END_CYC
         
         UNDEFINE($arr)
         TFClear("in.txt", 1)

Примерно такой код может записать текст без пустых строк, формируя строки для Excel
Подскажите знатоки, если что не учёл, помогите "причесать" код )
Title: Re: Не срабатывает код на голом месте
Post by: gsukhado on August 18, 2017, 11:50:34 AM
Vint
Круто, ОГРОМНОЕ СПАСИБО!

...а скрины вот здесь http://crapware.aidf.org/forum/index.php?topic=3389.msg23167#msg23167 ты в каком редакторе делал? У меня в Кликермане ни пробелы, ни табы не видны, просто пустое место и все (хочу визуально проверить коды, в которых подобные ошибки появлялись)
Title: Re: Не срабатывает код на голом месте
Post by: Vint on August 18, 2017, 12:19:56 PM
И почему именно 2 символа воспринимается как пустая строка ? Что это за символы ? Может с ними можно как-то решить задачу ?

Это символы \r\n (или CRLF)в винде это стандарт окончания cтрок.
\r - возврат каретки
\n - перевод строки

В UNIX и MAC по другому
(http://savepic.net/9761056.png)


Думаю это костыли вылезли. Изначально все команды размера строки  или строковой переменной показывали размер без \r\n чтоб незнающие не путались. Особенно если строка вытянута из файла.
Когда попросили исправить, чтоб не спотыкался на пустых строках (в пустой строке файла только 2 символа \r\n) пришлось что-то переделывать и размер стало показывать 2, настоящий. По нему наверно и определяет что строка пуста.
Если в файле строка содержит только \r\n и её длина 2.
Обрезать и оставить пусто нельзя, тогда нет строки. Нужно чтоб и пользовательская функция STRLEN() на пустой строке показывала по старому, для нубов, т.е. 0. Внутри себя пусть кликер знает, что там есть и должно быть, чтоб при записи/чтении из файла эти строки не пропали.
Title: Re: Не срабатывает код на голом месте
Post by: Vint on August 18, 2017, 12:26:41 PM
...а скрины вот здесь http://crapware.aidf.org/forum/index.php?topic=3389.msg23167#msg23167 ты в каком редакторе делал?

Notepad++ , там же видно в заголовке.


Там же можешь и заменить во всём тексте. Выделив неразрывный пробел и в замене указать обычный.
Title: Re: Не срабатывает код на голом месте
Post by: Axelenz on August 18, 2017, 12:34:16 PM
Если я правильно понял, то значит функция

Code: [Select]
STRLEN ("str")
понимает, что если в строке всего два символа, то это может быть только \r\n а сам текст начинается уже с 3-го элемента ?
Title: Re: Не срабатывает код на голом месте
Post by: Vint on August 18, 2017, 01:23:04 PM
Сам текст до этих символов.

Я думаю, что STRLEN() просто некорректно показывает длину на пустой строке с одним \r\n. Точнее это как раз правильно, но это отличается от обычного (упрощённого) вывода длины всех других строк, где она \r\n не считает и отбрасывает.
Title: Re: Не срабатывает код на голом месте
Post by: Cleoss on August 18, 2017, 04:20:46 PM
Как стало ясно, скрипт создавался в Ворде или ФронтПейдже))

В Нотпеде++ есть в меню Правка пункты "Операция со строками" и "Операция с пробелами", где в частности можно удалить лишние пробелы, пустые строки и строки только с пробелами, а также поменять формат конца строк на виндовый.

P. S. А оформление у скриптика шикарное, только анимации не хватает.