Author Topic: Ошибка при интерпретации строки  (Read 5813 times)

0 Members and 1 Guest are viewing this topic.

Annihilant

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Ошибка при интерпретации строки
« on: November 05, 2015, 08:45:47 AM »
Ошибка при интерпретации строки TFWRITE("otchet.txt", STRCONCAT($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts, " ", $note))
продолжить выполнение?

Code: [Select]
SUB(LOG,$note) // подпрограмма лога с датой
//укорачиваем переменные
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
//проверяем переменные на двузначность
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   TFWRITE("otchet.txt", STRCONCAT($dd,".",$dm,".",$dy," ",$th,":",$tm,":",$ts, " ", $note)) // запись в файл
END_SUB

но не постоянно а как то изредка. В чем может быть проблема?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка при интерпретации строки
« Reply #1 on: November 05, 2015, 09:18:23 AM »
часто пишешь, нет задержек или они маленькие.
Без задержки очень быстро скрипт  пытается писать в ещё заблокированный файл.


Annihilant

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: Ошибка при интерпретации строки
« Reply #2 on: November 05, 2015, 09:53:37 AM »
Ок, попробую увеличить временные отрезки.

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: Ошибка при интерпретации строки
« Reply #3 on: November 13, 2015, 03:54:18 AM »
Ок, попробую увеличить временные отрезки.
К сожалению, это не поможет. КМ должен иметь монопольный доступ к файлу с которым работает. Он не начнет новую запись в файл, пока функция TFWRITE, в данном случае,  не отработает до конца и не вернет код ошибки, то есть результат своей работы. И если результат выполнения функции - ошибка, то КМ приостановит выполнение скрипта и сообщит об этом пользователю. Поэтому задержки тут не при чем. И если какой то программе, параллельно с КМ, требуется открывать файл "otchet.txt" для чтения/записи, то они должны обмениваться кодами ошибок, что бы синхронизировать свою работу.
Например, после запуска bat-файла из скрипта, cmd.exe может сообщить Clickermann'у об окончании своей работы через буфер обмена. Для этого bat-файл должен завершаться соответствующей строкой, например CLS | clip. Clickermann в свою очередь, будет в цикле проверять буфер обмена и ждать появления в нем характерного символа, и после его обнаружения продолжит выполнение сценария (либо выполнит какое то определенное действие, если превышен интервал ожидания).
Еще можно попробовать решить проблему, если в настройках КМ поставить галочку "Игнорировать ошибки".

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Ошибка при интерпретации строки
« Reply #4 on: November 13, 2015, 08:17:06 AM »
По моему в условии и так никто кроме кликера в файл не пишет.

Как то, по просьбе, делал скрипт, который пересчитывал в записанном сценарии все задержки в n раз.
Скрипт пробегал по строкам и найдя WAIT или WAITMS делал пересчёт и писал на то же место.
При работе скрипт падал на строке записи. То после 300 строк, то после 500... больше 700 кажется ни разу не проскочил.
Поставив минимальную задержку в 5 мс на каждом цикле обработки строки всё наладилось и скрипт стал благополучно перерабатывать файлы в несколько тысяч строк.

Тут даже дело не в монопольном доступе, потому что кликер работает один, а в буферизации записи на диск контролируемой виндой.
Винда берёт данные на запись и рапортует программе что всё OK и завершено, отпуская её тем самым на волю. Этот механизм ускоряет работу программ при работе с медленным диском.
Из-за одновременных запросов на запись к системе, очередь имеет разную длину ну и соответственно до нашей записи когда время дойдёт не предсказуемо. Чем меньше нагрузка на комп тем лучше.
« Last Edit: November 13, 2015, 08:23:46 AM by Vint »