WatchFile: и переменные

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

WatchFile: и переменные

Postby SeMa » Mon, 26 Mar 2012, 14:55

Каким образом в WatchFile: можно задать маску с использованием переменных?
У меня не получилось :(.
ни так
Code: Select all
WatchFile: "_*.* %+ModuleDirName%"

ни так
Code: Select all
: ?mod-file ( -- a u )  S" _*.*" +ModuleDirName ;
WatchFile: "%?mod-file%"
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: WatchFile: и переменные

Postby VoidVolker » Mon, 26 Mar 2012, 17:20

+ModuleDirName ( a u -- a1 u1 ) Требует строку на стеке.
Ну если не работает - с этим ничего не поделаешь. Остается только вручную в цикле отслеживать нужные файлы.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: WatchFile: и переменные

Postby SeMa » Mon, 26 Mar 2012, 17:43

VoidVolker wrote:+ModuleDirName ( a u -- a1 u1 ) Требует строку на стеке.

Code: Select all
S" _*.*" +ModuleDirName

а здесь разве нет строки? (может, неправильно написано задание переменной в примере). В консоли показывает правильно:
S" _*.*" +ModuleDirName TYPE
D:\progs\nnCron\_*.* Ok

В задаче приведённый в 1м посте пример даёт ошибку крона:
Internal error. Error # -1073741819

Похоже, что WatchFile: не умеет обрабатывать переменные, т.к. "пустая" задача
Code: Select all
#( test123456789
WatchFile: "_*.* %+ModuleDirName%"
Action:
)#
выдает то же.
VoidVolker wrote:Ну если не работает - с этим ничего не поделаешь. Остается только вручную в цикле отслеживать нужные файлы.

Я как раз от этого и хотел уйти :(. У меня табы и автономные скрипты начинаются с _, а расширение у них разное. И гонять циклы на каждый тип - не айс.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: WatchFile: и переменные

Postby VoidVolker » Mon, 26 Mar 2012, 20:19

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

Re: WatchFile: и переменные

Postby AlikasS » Tue, 27 Mar 2012, 01:19

наверное это мешает отловить файлы
Слова WatchFile:/WatchFileDelete: могут работать и с масками файлов, правда с одной оговоркой: они ищут в указанном каталоге первый подходящий по маске файл и только для первого найденного файла делают проверку на появление/изменение/удаление. Т. е. если в каталоге уже есть файл, удовлетворяющий заданной маске, то WatchFile:/WatchFileDelete: могут не сработать при появлении/изменении/удалении следующего, подпадающего под эту же маску файла.
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: WatchFile: и переменные

Postby SeMa » Wed, 28 Mar 2012, 12:15

AlikasS wrote:наверное это мешает отловить файлы
Слова WatchFile:/WatchFileDelete: могут работать и с масками файлов, правда с одной оговоркой: они ищут в указанном каталоге первый подходящий по маске файл и только для первого найденного файла делают проверку на появление/изменение/удаление. Т. е. если в каталоге уже есть файл, удовлетворяющий заданной маске, то WatchFile:/WatchFileDelete: могут не сработать при появлении/изменении/удалении следующего, подпадающего под эту же маску файла.

В папке искомых файлов несколько, но изменятся одновременно несколько не могут - это табы и скрипты крона.
Проблема в том (по-моему), что WatchFile:-таки не "кушает" маски с переменными.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: WatchFile: и переменные

Postby AlikasS » Wed, 28 Mar 2012, 15:08

и чем это противоречит цитате из хелпа?
крон "нашел" подходящий файл по маске и следит за ним, а меняется (появление/изменение/удаление)
следующий подходящий по маске, а он на него и не реагирует.
все согласно хелпу :)
User avatar
AlikasS
 
Posts: 1434
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: WatchFile: и переменные

Postby SeMa » Wed, 28 Mar 2012, 18:00

AlikasS wrote:и чем это противоречит цитате из хелпа?

Я ведь не об этом. Ошибка Internal error. Error # -1073741819 возникает всегда! при вставке в параметр слова переменной.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: WatchFile:

Postby SeMa » Wed, 23 May 2012, 17:53

Не стал делать новую тему. Всё про WatchFile:.
Столкнулся с такой ситуацией:
Code: Select all
#( test_watchfile_123
SingleInstance
WatchFile: "D:\test\SG*"
Action:
S" D:\test\SG*" RECENT-FILE-TIME HINT
...
)#

Вообще-то, что в задаче - не важно.
Задача срабатывает только на появление ПЕРВОГО (читать - НОВОГО) файла, соответствующего маске. На остальные - 0 реакции.
Файлы SG (имя - любое) без расширения (хотя это на скорость, т.е. на работу задачи (крона) не влияет :( - пробовал по-разному: */*./*.*).
Проверял на 2х компах: WinNT4.0 SP6 En Lic, WinXP SP3 VLK Ru Lic, nncron.exe v 1.91 Build 1083 21.03.2006
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

Re: WatchFile: и переменные

Postby elos » Thu, 24 May 2012, 11:57

Всё в помощи описано:
Слова WatchFile:/WatchFileDelete: могут работать и с масками файлов, правда с одной оговоркой: они ищут в указанном каталоге первый подходящий по маске файл и только для первого найденного файла делают проверку на появление/изменение/удаление. Т. е. если в каталоге уже есть файл, удовлетворяющий заданной маске, то WatchFile:/WatchFileDelete: могут не сработать при появлении/изменении/удалении следующего, подпадающего под эту же маску файла.


По мне - надо использовать WatchDir: "dir_path" [flag] [modifiers] и далее запускать свою процедуру поиска нужного файла (FOR-FILES: + WRITE-DATE + CUR-DATE например)...
elos
 
Posts: 664
Joined: Tue, 25 Apr 2006, 11:15

Re: WatchFile:

Postby SeMa » Thu, 24 May 2012, 13:23

elos wrote:Всё в помощи описано:
Да, уж, стареем :(... Я про маски знаю, но подробности забыл :roll:

elos wrote:По мне - надо использовать WatchDir: "dir_path" [flag] [modifiers] и далее запускать свою процедуру поиска нужного файла (FOR-FILES: + WRITE-DATE + CUR-DATE например)...
Спасибо. Об этом думал, но хотелось как-то попроще.
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина

WatchDir: вместо WatchFile:

Postby SeMa » Wed, 30 May 2012, 10:28

elos wrote:По мне - надо использовать WatchDir: "dir_path" [flag] [modifiers]...

В продолжение.
Есть 4 вида файлов: DA*, IA*, SG*, TG*.
Все записываются в одну папку, обычно в разное время, но редко могут и перекрываться по времени.
В начале дня папка пуста, далее появляются эти файлы не по очереди, некоторые могут удаляться, другие - оставаться.
Написал 4 задачи на каждый вид файлов для отслеживания окончания записи. В общем-то устраивает. Не очень нравится, что все задачи, кроме той, что "поймала" "свой" файл срабатывают дважды (естественно): при появлении файла и при окончании его записи.
Задачи абсолютно одинаковые, кроме названия и соответствующей маски файлов.
Code: Select all
#( test_DA
SingleInstance
AsLoggedUser
WatchDir: "N:\test"
WATCH-CHANGE-ATTRIBUTES
Action:
S" N:\test\DA*" RECENT-FILE-TIME                     \ выбираемый самый "свежий" файл DA*
2DUP
2DUP FILE-WTIME FT-CUR 2SWAP FTIME- 5 <              \ определяем его "свежесть" (до 5 сек)
IF
    S"  detected" S+ HINT                            \ это - ОН
    2>R                                              \ чтобы не запоминать имя файла в переменной
    BEGIN
        1000 PAUSE
        2R@ R/O OPEN-FILE SWAP CLOSE-FILE DROP 0=    \ ждём завершения записи
    UNTIL
    2R> S"  completed" S+ HINT                       \ ОН записан!
ELSE
    2DROP 2DROP                                      \ если не ОН, удаляем лишние данные
THEN
)#

Может, можно как-то изящнее? :wink:
Компьютер ─ устройство, разработанное для ускорения и автоматизации человеческих ошибок
User avatar
SeMa
 
Posts: 637
Joined: Fri, 15 Apr 2005, 12:49
Location: Украина


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest

cron