RE-MATCH, FILE: и %ModuleDirName%

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

RE-MATCH, FILE: и %ModuleDirName%

Postby Reyter » Mon, 21 May 2007, 15:07

Подскажите плиз.
Нужно провести поиск в файле по регэкспу. Обе конструкции (здесь в упрощенном варианте) у меня работают:
S" %FILE: C:\Program Files\nnCron\ip_table.txt%" EVAL-SUBST S" /IP/s" RE-MATCH
или
RE-MATCH: "%FILE: C:\Program Files\nnCron\ip_table.txt%" "/IP/s"

А теперь научите меня, как вместо "C:\Program Files\nnCron\" мне использовать %ModuleDirName%? Как не бился, ничего не получается. :(

Если можно, ответить доступно для чайника. С живым примером :oops:
Reyter
 
Posts: 7
Joined: Wed, 16 May 2007, 15:56

Postby VoidVolker » Mon, 21 May 2007, 16:14

Вот так не очень эффективно:
Code: Select all
S" %FILE: C:\Program Files\nnCron\ip_table.txt%" EVAL-SUBST S" /IP/s" RE-MATCH

Вот так проще и эффективнее(см хелп "Неотложная помощь" по Форту, ворос 11):
Code: Select all
S" C:\Program Files\nnCron\ip_table.txt" FILE S" /IP/s" RE-MATCH

как вместо "C:\Program Files\nnCron\" мне использовать %ModuleDirName%?

Вот так:
Code: Select all
ModuleDirName S" ip_table.txt" S+ FILE S" /IP/s" RE-MATCH

Или так:
Code: Select all
S" %ModuleDirName%ip_table.txt" EVAL-SUBST FILE S" /IP/s" RE-MATCH
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Postby Reyter » Mon, 21 May 2007, 16:22

Спасибо огромное!!!
Работает! :lol:
Reyter
 
Posts: 7
Joined: Wed, 16 May 2007, 15:56

Postby ANR Daemon » Fri, 25 May 2007, 02:58

VoidVolker wrote:
Code: Select all
S" %ModuleDirName%ip_table.txt" EVAL-SUBST FILE S" /IP/s" RE-MATCH


/s - PCRE_DOT_ALL
Она тут не нужна.
Просто "/IP/" RE-MATCH
ANR Daemon
 
Posts: 234
Joined: Mon, 26 Feb 2007, 22:59

Postby Reyter » Fri, 25 May 2007, 08:33

ANR Daemon wrote:/s - PCRE_DOT_ALL
Она тут не нужна.
Просто "/IP/" RE-MATCH


Ну, на самом деле регекспа у меня намного сложнее. И "/s" там просто необходима. Просто я не стал заморачивать голову остальным, поскольку к текущей проблеме это не имело никакого отношения. ;)
Reyter
 
Posts: 7
Joined: Wed, 16 May 2007, 15:56

Re: RE-MATCH, FILE: и %ModuleDirName%

Postby Headcrab » Wed, 27 Aug 2014, 10:06

Всем доброго дня,
мне кажется я не рационально использую команду сравнения.
Я один и тот же файл при каждом сравнении гружу в память, что то мне подсказывает что можно один раз загрузить файл в память а потом уже сравнивать искомую комбинацию с её содержимым. А в конце производить её (памяти) очистку.
Можете натолкнуть на путь истинный если конечно такое вообще возможно.

Сейчас сравнение происходит так - грузится файл в память, сравнивается, далее снова этот же файл отправляется в память и вновь сравнивается.
Таких переборов у меня с десяток.
Пример:
Code: Select all
   FOR-FILES: "C:\test\*.bin"
      S" %FOUND-FULLPATH%" EVAL-SUBST FILE S" /text_A/" RE-MATCH
      IF
      THEN
      S" %FOUND-FULLPATH%" EVAL-SUBST FILE S" /text_B/" RE-MATCH
      IF
      THEN

                ...

      S" %FOUND-FULLPATH%" EVAL-SUBST FILE S" /text_N/" RE-MATCH
      IF
      THEN


Сам пытался создать массив на 5000байт поместить в него FILE а далее произвести сравнение уже с содержимым массива.
Но пока ничего не получилось, явные проблемы в синтаксисе.
Headcrab
 
Posts: 19
Joined: Fri, 21 Feb 2014, 14:05

Re: RE-MATCH, FILE: и %ModuleDirName%

Postby elos » Wed, 27 Aug 2014, 12:11

Ветвление уже неправильно написано:
Code: Select all
<условие> IF <действие_если_TRUE> THEN
<условие> IF <действие_если_TRUE> ELSE <действие_если_FALSE> THEN
Лучше сформулируй заново свою задачу - что имеем, что сделать надо... И в новой теме.
elos
 
Posts: 665
Joined: Tue, 25 Apr 2006, 11:15

Re: RE-MATCH, FILE: и %ModuleDirName%

Postby Headcrab » Wed, 27 Aug 2014, 13:24

elos wrote:Ветвление уже неправильно написано:

Выдернуто из рабочего скрипта просто я действие затёр.
Плодить новых тем не хочется напишу здесь:
Время от времени в директории TEMP появляется файл, необходимо "парсить" его по нескольким признакам (пусть будет prizn1, prizn2 ..)
и в зависимости от найденного признака перемещать этот файл в ту или иную директорию. Найден prizn1 перемещаем файл из TEMP в TEMP\prizn1,
найден prizn2 перемещаем в TEMP\prizn2

Вот скрипт которым пользуюсь в данный момент:
Code: Select all
#( parsing_of_responses
SingleInstance
NoActive
Time: */5 7-23 * * * *
Action:
FILE-EXIST: "\\transport\TEMP"
IF
   FOR-FILES: "\\transport\TEMP\*.bin"
      S" %FOUND-FULLPATH%" EVAL-SUBST FILE S" /prizn1/" RE-MATCH
      IF
         DIR-CREATE: "C:\Work\Resp\prizn1\IN\ARC\%YYYY%\%MM%\%DD%"
         FILE-MOVE: "%FOUND-FULLPATH%" "C:\Work\Resp\prizn1\IN\ARC\%YYYY%\%MM%\%DD%"
      THEN

      S" %FOUND-FULLPATH%" EVAL-SUBST FILE S" /prizn2/" RE-MATCH
      IF
         DIR-CREATE: "C:\Work\Resp\prizn2\IN\ARC\%YYYY%\%MM%\%DD%"
         FILE-MOVE: "%FOUND-FULLPATH%" "C:\Work\Resp\prizn2\IN\ARC\%YYYY%\%MM%\%DD%"
      THEN

...

      S" %FOUND-FULLPATH%" EVAL-SUBST FILE S" /priznN/" RE-MATCH
      IF
         DIR-CREATE: "C:\Work\Resp\priznN\IN\ARC\%YYYY%\%MM%\%DD%"
         FILE-MOVE: "%FOUND-FULLPATH%" "C:\Work\Resp\priznN\IN\ARC\%YYYY%\%MM%\%DD%"
      ELSE
         FILE-MOVE: "%FOUND-FULLPATH%" "C:\Work\Resp\RAZBOR"
      THEN
   ;FOR-FILES
THEN
)#
Headcrab
 
Posts: 19
Joined: Fri, 21 Feb 2014, 14:05

Re: RE-MATCH, FILE: и %ModuleDirName%

Postby VoidVolker » Wed, 27 Aug 2014, 13:42

Code: Select all
S" %FOUND-FULLPATH%" EVAL-SUBST
Бессмыслено.
Надо так:
Code: Select all
FOUND-FULLPATH


Code: Select all
<...>
2VARIABLE my_file
Action:
<...>
S" filepath"  FILE my_file 2!
<...>
my_file 2@ < .... >
my_file 2@ < .... >
my_file 2@ < .... >
<...>

Если один файл - то память можно не освобождать. А если обрабатывается много файлов в цикле, то после обработки файла, когда текст из него уже не нужен, память можно освободить так:
Code: Select all
my_file 2@  DROP FREE THROW
0 0 my_file 2!  \ На всякий случай выкидываем недействительный адрес из переменной (не обязательно)
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: RE-MATCH, FILE: и %ModuleDirName%

Postby Headcrab » Wed, 27 Aug 2014, 15:59

Правда все имеющиеся файлы уходят в RAZBOR в папку prizn1 ничего не попадает
Code: Select all
#( parsing_of_responses
Time: */5 7-23 * * * *
NoActive
2VARIABLE rep_file
Action:
   FOR-FILES: "D:\TEMP\*.bin"
   S" FOUND-FULLPATH" FILE rep_file 2!
      rep_file 2@ S" /prizn1/" RE-MATCH
      IF
         FILE-MOVE: "%FOUND-FULLPATH%" "D:\TEMP\prizn1"
      ELSE
         FILE-MOVE: "%FOUND-FULLPATH%" "D:\TEMP\RAZBOR"
      THEN
   ;FOR-FILES
)#


Подходит ли такой тип переменной (2VARIABLE) для моего случая? Файл в котором ищется признак состоит в основном из текста. Правда ищу я в нём числовую составляющую.
При использовании массива у меня такой же результат
Code: Select all
#( parsing_of_responses
Time: */5 7-23 * * * *
NoActive
CREATE rep_file 5000 ALLOT
Action:
   FOR-FILES: "D:\TEMP\*.bin"
   S" FOUND-FULLPATH" FILE rep_file PLACE
      rep_file COUNT S" /prizn1/" RE-MATCH
      IF
         FILE-MOVE: "%FOUND-FULLPATH%" "D:\TEMP\prizn1"
      ELSE
         FILE-MOVE: "%FOUND-FULLPATH%" "D:\TEMP\RAZBOR"
      THEN
   ;FOR-FILES
)#
Headcrab
 
Posts: 19
Joined: Fri, 21 Feb 2014, 14:05

Re: RE-MATCH, FILE: и %ModuleDirName%

Postby VoidVolker » Wed, 27 Aug 2014, 19:31

Code: Select all
S" FOUND-FULLPATH"

Еще раз:
Code: Select all
FOUND-FULLPATH

FOUND-FULLPATH - это слово. Возвращает строку с полным путем найденного файла циклом FOR-FILES.
Headcrab wrote:Подходит ли такой тип переменной (2VARIABLE) для моего случая?

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

Re: RE-MATCH, FILE: и %ModuleDirName%

Postby Headcrab » Thu, 28 Aug 2014, 08:14

VoidVolker wrote:Еще раз:
Code: Select all
FOUND-FULLPATH

FOUND-FULLPATH - это слово. Возвращает строку с полным путем найденного файла циклом FOR-FILES.

Теперь понял. Изменил и всё заработало. Благодарствую вам за помощь!
Headcrab
 
Posts: 19
Joined: Fri, 21 Feb 2014, 14:05


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 3 guests