Вопрос - Ответ

Обсуждение программ nnCron и nnCron LITE

Re: Вопрос - Ответ

Postby Morituruz » Wed, 11 Jan 2012, 16:27

Есть ли способ превратить строку в слово т.е. выполнить как слово покороче, чем " %word%" EVAL-SUBST?
Например если я считываю из ini файла номер группы из регэкспа ($1, $2 ...) то приходится окружать процентами и делать EVAL-SUBST. Получается длинный паровозик из склеиваемых строк:
Code: Select all
" |p" " gr" INI-GET-VALUE S+ " |p" S+ EVAL-SUBST " text" INI-GET-VALUE
User avatar
Morituruz
 
Posts: 729
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Wed, 11 Jan 2012, 17:32

Да, главное, чтобы в строке был чистый форт, т.е. без лишнего мусора:
Code: Select all
S" $1" EVALUATE

Кстати, еще удобнее будет использовать в ини форт и просто загружать его:
Code: Select all
" file.ini" INCLUDED

Сделать по-аналогии с nncron.ini.
<слово><пробел>[строка]
Получить строку можно вот так:
Code: Select all
: слово
  0 PARSE  \ a u
  <работаем со строкой>
;
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2933
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Wed, 11 Jan 2012, 20:09

VoidVolker wrote:S" $1" EVALUATE

Спасибо!
VoidVolker wrote:Кстати, еще удобнее будет использовать в ини форт и просто загружать его:

Так проходить по разделам (section) то уже не получится как я понимаю, плюс нужно создавать новые слова, плюс нужно с вас спрашивать как обновлять значение в этом "включённом" ini — я что-то удобства не вижу :)
User avatar
Morituruz
 
Posts: 729
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Wed, 11 Jan 2012, 20:35

Создать несколько слов по фразе проще, чем писать нечитаемый код на несколько десятков строчек. Насколько я понимаю, речь идет о той задаче со списками? Как вариант можно в задаче создать список, а в ини несколькими словами добавлять в список необходимые данные. Блок - фиксированное число последовательных строк в списке. И в обычном цикле получаем нужное количество строк:
Code: Select all
...
STRING-LIST: data
: P1= 0 PARSE data! ;
: P2= 0 PARSE data! ;
: P3= 0 PARSE data! ;
Action:
" data.ini" INCLUDED
BEGIN data@ NIP WHILE
  data@> TYPE CR
  data@> TYPE CR
  data@> TYPE CR
REPEAT
data FREE-LIST
...

data.ini:
Code: Select all
P1= text1
P2= text2
P3= text3

P1= text1
P2= text2
P3= text3
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2933
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Fri, 13 Jan 2012, 02:03

VoidVolker wrote:Создать несколько слов по фразе проще, чем писать нечитаемый код на несколько десятков строчек.

Не смешите, нечитаемость это наверное наименьший недостаток моего "кода" :D . Тем более читать его особо некому.
Да и зачем изобретать велосипед, если уже есть ini.spf, и он работает? К тому же ещё нужно придумывать запись в параметр секции. Это конечно для вас не проблема, но зачем?
Лёгким движением руки я запрятал конструкции вида "parameter" INI-GET-VALUE в слова и всё (обновил тему с изменениями на сайте).
Кстати, давно хотел спросить, зачем Николай Немцов сделал ini.spf на основе win api, ему-то точно не проблема была с нуля написать? Может именно потому, что уже есть готовое решение.
User avatar
Morituruz
 
Posts: 729
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby ask » Fri, 13 Jan 2012, 09:54

Не совсем в тему, но про INI-шки :)
В "ini.spf" я добавил словечко "INI-DEL-VALUE", что позволило как добавлять, так и удалять параметры и их значения в INI-файле.
В свою очередь, это позволяет организовать простенькую реализацию "таблицы": "параметр - значение".

Такую табличку я использую в скриптах "nnProc.tab" и "nnProcStop.tab" - для хранения имён запущенных процессов - ведь в момент "исчезновения" процесса его имя уже неизвестно nnCron'у.

Тут-то и пригождается табличка: по PID'у процесса находится его имя и выполняются действия, назначенные на событие "останов такого-то процесса".



: INI-DEL-VALUE ( a1 u1 a2 u2 -- )
{ \ key val -- }
S>ZTEMP TO val
S>ZTEMP TO key
INI_FileName @ 0 key INI_SectionName @ WritePrivateProfileStringA DROP
;
ask
 
Posts: 63
Joined: Sun, 11 Dec 2011, 09:38

Re: Вопрос - Ответ

Postby VoidVolker » Fri, 13 Jan 2012, 15:44

А какой вообще смысл в этих инишниках-то? Чем плох вариант с записью в кронтаб? Все равно такой же текстовый файл, так же нужно ручками редактировать. Да и вообще, можно скрипт задачи вынести в файл, далее в задаче пишем что-то типа такого:
Code: Select all
" task.spf" INCLUDED

и через меню крона легко в гуи пишем "данные" задачке.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2933
Joined: Tue, 25 Apr 2006, 17:56

Re: Вопрос - Ответ

Postby Morituruz » Fri, 13 Jan 2012, 16:06

VoidVolker wrote: Все равно такой же текстовый файл, так же нужно ручками редактировать.

Ну например частые перечитывания кронтаба сбрасывают много работающих задач. ИМХО для хранения процесс-PID списки подходят лучше всего, т.к. никакого лишнего файлооборота, а жёсткие диски надо беречь, они нынче дорогие.
User avatar
Morituruz
 
Posts: 729
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby ask » Fri, 13 Jan 2012, 16:11

До списков я ещё не дорос, надо квалификацию повышать.
А инишка у меня работает там, куда указывает %TEMP%.
А указывает она прямиком на виртуальный диск (созданный в оперативной памяти), так что винты спят спокойно...
ask
 
Posts: 63
Joined: Sun, 11 Dec 2011, 09:38

Re: Вопрос - Ответ

Postby Morituruz » Fri, 13 Jan 2012, 16:23

ask wrote:А указывает она прямиком на виртуальный диск (созданный в оперативной памяти), так что винты спят спокойно...

Если не секрет, чем создавали? Я пользуюсь qsoft RAMdrife Enterprise, приходится создавать папку с названием темпа при старте системы, это ещё хорошо, что ннкрон сервисом, они первее автозапуска запускаются вроде.
User avatar
Morituruz
 
Posts: 729
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby ask » Fri, 13 Jan 2012, 18:04

Вот этим: http://asksoft.net/Download/RamDisk.rar
Работает, как драйвер, что удобно: к моменту запуска любой службы RAMDrive уже существует.
ask
 
Posts: 63
Joined: Sun, 11 Dec 2011, 09:38

Re: Вопрос - Ответ

Postby Morituruz » Fri, 13 Jan 2012, 18:22

то же самое что и у меня. Существует это конечно да, но папки-то на нём создавать нужно.
User avatar
Morituruz
 
Posts: 729
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby ask » Sat, 14 Jan 2012, 10:00

У меня 2 варианта: либо создаю скриптом крона в "START-TIME", либо делаю образ RAMDriv'а (средствами этого драйвера), и он при загрузке восстанавливает всё, что было на диске.
ask
 
Posts: 63
Joined: Sun, 11 Dec 2011, 09:38

Re: Вопрос - Ответ

Postby Morituruz » Tue, 17 Jan 2012, 21:31

Как запустить слово в отдельном потоке? Оно ничего не возвращает, хочу просто запустить это слово и дальше идти.
Или проще в отдельную задачу и её LAUNCH?
User avatar
Morituruz
 
Posts: 729
Joined: Sun, 14 Oct 2007, 01:51

Re: Вопрос - Ответ

Postby VoidVolker » Tue, 17 Jan 2012, 22:08

Code: Select all
:NONAME 5 0 DO ." Task work" CR 1000 PAUSE LOOP ; TASK: mytask
mytask START
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2933
Joined: Tue, 25 Apr 2006, 17:56

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 5 guests

cron