Forth
http://www.fforum.winglion.ru/

ограничения в содержимом au-строки определяемой через S"
http://www.fforum.winglion.ru/viewtopic.php?f=20&t=2204
Страница 1 из 1

Автор:  makrus [ Чт июл 16, 2009 10:35 ]
Заголовок сообщения:  ограничения в содержимом au-строки определяемой через S"

Сталкнулся со следующей непонятной для меня ситуацией:
есть простая вроде бы задачка (упростил как мог)
Код:
#( CLASSIC-TASK-#-Test
\ зацикливание
\ NoActive
WatchHotKey: "^t"
Action:
  TRAY-REFRESH
  S" Начали" MsgBox
  S" блабл='left' блабл='блаб_блабл'><b>блабл бл блаб блабла бла б блаблабл:<бл />1. Блабла блаблаб блаблабл блаблаб б блабла бла блабл б блабл(блаблабл бла блаблабл блаблабл блаблабла)бла блаб блаблаблаб блаб блаблаб б блабла<бл />3. БЛаб блаблаблаб блабл</b></td>"
  2DROP
  S" Закончили" MsgBox
)#
Первая и последнии au-строки - для контроля работы задачки, а вот вторая..., вообще-то это был html-код, который я как смог заменил на "блаблабла" , возможно и еще есть возможность часть этой строки вырезать/заменить, но перебирать все возможные комбинации - нет времени...
Так вот в таком состоянии эта задача при запуске зацикливается на выводе первого окошка, остановить можно только рестартом nnCron'а.
В результате манипуляций с содержимым второй au-строки можно добиться:
- нормальной работы задачи - последовательное появление двух окошек и выход из задачи;
- завершение с ошибкой, например "Внутренняя ошибка. Error # -1073741819";
- падение nnCron'а с последующий перезапуском благодаря гуарду...
Проверял с дефолтным nncron.ini и этой единственной добавленной задачей, на XP SP2 c последним релизом nnCron'а от 2006 года
Я уже второй день пытаюсь выяснить причину такого "нелогичного" для меня поведения nnCron'а, но уже не знаю куда копать... самое вероятное что мне приходит в голову, так это то, что в этой строке есть иммэдиейт слово которое "ломает" парсинг этой строки до закрывающей кавычки, но что-то я его тут "в упор не вижу" :? ...
Так вот прошу:
1. проверьте у себя эту задачу - проблема в этой строке или у меня в компе?
2. если проблем в строке, то в чем именно?

Автор:  Ilya [ Чт июл 16, 2009 10:58 ]
Заголовок сообщения:  Re: ограничения в содержимом au-строки определяемой через S&

makrus писал(а):
Я уже второй день пытаюсь выяснить причину такого "нелогичного" для меня поведения nnCron'а, но уже не знаю куда копать... самое вероятное что мне приходит в голову, так это то, что в этой строке есть иммэдиейт слово которое "ломает" парсинг этой строки до закрывающей кавычки, но что-то я его тут "в упор не вижу" :? ...
Так вот прошу:
1. проверьте у себя эту задачу - проблема в этой строке или у меня в компе?
2. если проблем в строке, то в чем именно?

А ты в курсе, что твоя строка весит 260 байт?
Стандартные счётные строки должны быть не более 255 байт!
Для длинных строк есть 0-строки!

Автор:  VoidVolker [ Чт июл 16, 2009 11:15 ]
Заголовок сообщения: 

Помошь>Дополнительная информация>Решение возникающих проблем>13. Накладывает ли nnCron какие-то ограничения на размер кронтаба, длину строки в кронтабе, общее количество задач?
Цитата:
Фактическое ограничение только одно: длина одной строки в кронтабе не должна превышать 512 символов.

Но на самом деле строки больше 255 символов все равно вызывают ошибки. Поэтому большие тексты лучше подгружать из отдельных файлов.

Ilya писал(а):
Стандартные счётные строки должны быть не более 255 байт!
Для длинных строк есть 0-строки!

Это утверждение верно только для строк с однобайтным счетчиком в начале строки, вида C" текст". К строкам вида S" текст" оно не применимо, т.к. счетчик в таких строках является отдельным 4-х байтным числом.

Автор:  mOleg [ Чт июл 16, 2009 11:25 ]
Заголовок сообщения: 

попробуйте сделать более короткую строку, или, даже, обойтись без нее в начале.
Если все будет нормально. Удлиняйте по-тихоньку :)
я так понимаю, S" в nncron занимается форматным преобразованием?
если нет, то весь текст от S" bla bla ... " до завершающей кавычки должен располагаться в одной строке!

Автор:  VoidVolker [ Чт июл 16, 2009 11:32 ]
Заголовок сообщения: 

mOleg писал(а):
я так понимаю, S" в nncron занимается форматным преобразованием?

Нет, не занимается, обычные строки. Форматное преобразование осуществляется таким образом:
Код:
S" текст%любой код, возвращающий число или a u строку%еще текст" EVAL-SUBST

Автор:  makrus [ Чт июл 16, 2009 16:18 ]
Заголовок сообщения: 

Ilya
Цитата:
А ты в курсе, что твоя строка весит 260 байт?
угу, а в оригинале еще больше. Да ты прав, слишком большая строка..., самое обидное что я вчера и эту версию проверял (это я точно помню), но nnCron, видимо, так же падал и я стал искать дальше, наверное все-таки подсунул строку длинее 255, а как верно сказал VoidVolker
Цитата:
...на самом деле строки больше 255 символов все равно вызывают ошибки

Всем спасибо, как всегда "ларчик просто открывался" :shuffle;

Автор:  VoidVolker [ Чт июл 16, 2009 16:37 ]
Заголовок сообщения: 

makrus
Кстати, я для генерации простых хтмл из кронтаба делаю так:
Код:
\  # Компиляция тегов как строковых литералов
: TEG?  ( a u -- ? ) DROP C@ [CHAR] <  = ;
: DO-TEG  ( a u -- )
  2DUP S" >" SEARCH 0= NIP NIP  \ Проверяем наличие закрывающего символа в найденом слове
  IF
    S"  " S+ [CHAR] > PARSE 1+ S+  \ Если нету - дописываем пробел и парсим до закрывающего символа
  THEN
  [COMPILE] SLITERAL POSTPONE S+
;

WARNING @
WARNING OFF
: NOTFOUND ( a u -- )
  2DUP 2>R ['] NOTFOUND CATCH
  IF
    2DROP
    2R@ TEG? IF 2R@ DO-TEG ELSE -2003 THROW THEN
  THEN
  RDROP RDROP
;
WARNING !

А потом вот так:
Код:
<teg someparam="nnn" elseparam="m"> TYPE CR </teg> TYPE CR

Автор:  makrus [ Пт июл 17, 2009 08:12 ]
Заголовок сообщения: 

VoidVolker
Цитата:
для генерации простых хтмл из кронтаба делаю так
сам код я вроде понял, но никак с наскоку не соображу конечная цель какая? Представить кронтаб в виде html-файла окружив Слова тегами?

Автор:  VoidVolker [ Пт июл 17, 2009 14:13 ]
Заголовок сообщения: 

makrus писал(а):
сам код я вроде понял, но никак с наскоку не соображу конечная цель какая? Представить кронтаб в виде html-файла окружив Слова тегами?

Да это же обыкновенное упрощение синтаксиса создания хтмл-кода, сравни:
Код:
S" <teg someparam=" QUOTE S+ S" nnn" S+ QUOTE S+ S"  elseparam=" S+ QUOTE S+ S" m" S+ QUOTE S+ S" >" S+ TYPE CR S" </teg>" TYPE CR

и
Код:
<teg someparam="nnn" elseparam="m"> TYPE CR </teg> TYPE CR

Т.е. вместо сложения кучи строк, получаем пару понятных и простых строк, сразу видно - где хтмл, а где данные.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/