Author Topic: Не срабатывает код на голом месте  (Read 6256 times)

0 Members and 2 Guests are viewing this topic.

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Не срабатывает код на голом месте
« 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"

С чем это может быть связано?

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #1 on: August 17, 2017, 04:03:52 AM »
Что значат все эти ""вручную  перенабирать строку?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #2 on: August 17, 2017, 08:49:01 AM »
Возможно дело в кодировке после копирования из буфера. С бетта версией 4.13 такого скорее всего не будет. Но там полно других багов, например пустая строка воспринимается как две кавычки.


gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #3 on: August 17, 2017, 10:56:51 AM »
Что значат все эти ""вручную  перенабирать строку?
Именно дословно и значит: смотрю на экран на имеющуюся строку, и над/под ней набираю ее же еще раз на клавиатуре, визуально полностью идентичную, после чего ранее имевшуюся строку удаляю или прячу как комментарий - и вуаля, код заработал...

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #4 on: August 17, 2017, 11:27:46 AM »
Возможно дело в кодировке после копирования из буфера.
Да, однозначно не отловил, но пока впечатление такое, что если цифры или математические знаки (скобки, сложение и т.д.) были в русской раскладке - то высокий шанс что соответствующая строка кликером не воспринимается

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #5 on: August 17, 2017, 01:05:21 PM »
набираю ее же еще раз на клавиатуре, визуально полностью идентичную строку
А копипаст я так понимэ не работает?   ???

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #6 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
Ну или любой из знаков - не минус, а к примеру короткое тире.

Может ты копируешь из браузера, а там такие чудо настройки стоят, что стилями переделывают минусы в тире?
« Last Edit: August 17, 2017, 01:17:23 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #7 on: August 17, 2017, 01:09:04 PM »
А кинь ка файл скрипта, который не работает с подобной ошибкой? Именно файл, не текст.
Вот скопировал в кликер, сохранил, на всякий случай перезапустил переоткрыл и при запуске не работает.

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


Просто всё очень странно и предполагаю не в кликере дело.
« Last Edit: August 17, 2017, 01:11:49 PM by Vint »


gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #8 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

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #9 on: August 18, 2017, 12:49:31 AM »
А как ещё может выражаться то, что кликер не работает? Ну там не кликает или не находит чего, или что ещё? Или любое может не работать?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #10 on: August 18, 2017, 09:30:27 AM »
Да, данный конкретный код копировал с форума в Блокнот, а не напрямую в Кликер. А потом редактировал уже в Кликере. Если это принципиально - попробую напрямую в Кликер сразу.
Это не принципиально если редактор настроен правильно. Точнее если его не "сломали".


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



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



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

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

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

« Last Edit: August 18, 2017, 09:39:06 AM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #11 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 - всё нормально, все пробелы обычные.




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




Вывод: на форуме серии пробелов разбавляются неразрывными. Копировать код в редактор кликера или любые другие редакторы для работы с "простым" текстом txt. Они предназначены для кода.
Не копировать в MS WORD с форума. Да никто в здравом уме туда код не копирует.
« Last Edit: August 18, 2017, 10:32:55 AM by Vint »


Axelenz

  • Освоившийся
  • **
  • Posts: 31
  • Парсинг сайтов, наполнение интернет-магазинов
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #12 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
Подскажите знатоки, если что не учёл, помогите "причесать" код )
« Last Edit: August 18, 2017, 12:01:25 PM by Axelenz »
"Можно бесконечно смотреть на три вещи: как течёт вода, как горит огонь и как Clickermann работает вместо тебя..."

gsukhado

  • Активный участник
  • ***
  • Posts: 104
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #13 on: August 18, 2017, 11:50:34 AM »
Vint
Круто, ОГРОМНОЕ СПАСИБО!

...а скрины вот здесь http://crapware.aidf.org/forum/index.php?topic=3389.msg23167#msg23167 ты в каком редакторе делал? У меня в Кликермане ни пробелы, ни табы не видны, просто пустое место и все (хочу визуально проверить коды, в которых подобные ошибки появлялись)
« Last Edit: August 18, 2017, 12:01:31 PM by gsukhado »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает код на голом месте
« Reply #14 on: August 18, 2017, 12:19:56 PM »
И почему именно 2 символа воспринимается как пустая строка ? Что это за символы ? Может с ними можно как-то решить задачу ?

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

В UNIX и MAC по другому



Думаю это костыли вылезли. Изначально все команды размера строки  или строковой переменной показывали размер без \r\n чтоб незнающие не путались. Особенно если строка вытянута из файла.
Когда попросили исправить, чтоб не спотыкался на пустых строках (в пустой строке файла только 2 символа \r\n) пришлось что-то переделывать и размер стало показывать 2, настоящий. По нему наверно и определяет что строка пуста.
Если в файле строка содержит только \r\n и её длина 2.
Обрезать и оставить пусто нельзя, тогда нет строки. Нужно чтоб и пользовательская функция STRLEN() на пустой строке показывала по старому, для нубов, т.е. 0. Внутри себя пусть кликер знает, что там есть и должно быть, чтоб при записи/чтении из файла эти строки не пропали.