Маски файлов для цикла For Files

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

Маски файлов для цикла For Files

Postby simkot » Mon, 22 Jul 2013, 14:04

Необходимо, что бы цикл For Files работал с тремя масками файлов. То есть перебирал бы файлы с тремя различными расширениями. Возможно ли это сделать?
simkot
 
Posts: 20
Joined: Wed, 26 Aug 2009, 12:20

Re: Маски файлов для цикла For Files

Postby Morituruz » Mon, 22 Jul 2013, 14:57

Проверять на соответствие маске внутри цикла FOR-FILES.

Code: Select all
#( TEST_happy_three_extensions
NoActive SingleInstance
CREATE ext_buf 256 ALLOT
: FILENAME2NAME&EXT { a u \ dotpos -- a1 u1 a2 u2 }
    u 0= IF a u a u EXIT THEN
    -1 TO dotpos
    a a u CHARS + 1 CHARS -
    ?DO
        I C@ [CHAR] . =
            IF I TO dotpos LEAVE THEN
        I C@ DUP [CHAR] / = SWAP [CHAR] \ = OR
            IF LEAVE THEN
    -1 CHARS +LOOP
    dotpos -1 =
    IF a u S" "
    ELSE
       a dotpos a - 1 CHARS /
       dotpos CHAR+ OVER u SWAP - 1-
    THEN
;

Action:
FOR-FILES: "c:\dir\*"
    FOUND-FILENAME FILENAME2NAME&EXT    \ имя файла разделяем на имя и расширение
    2SWAP    \ меняем местами строки расширения файла и файла
    2DROP    \ сбрасываем со стека имя файла, т.к. оно нам не нужно, на стеке остаётся строка с расширением файла
    ext_buf PLACE    \ сохраняем расширение в переменную
    ext_buf COUNT S" doc" ICOMPARE 0=    \ сравниваем значение переменной с искомым расширением
    ext_buf COUNT S" xls" ICOMPARE 0=    \ сравниваем значение переменной с искомым расширением
    ext_buf COUNT S" txt" ICOMPARE 0=    \ сравниваем значение переменной с искомым расширением
    OR OR    \ или или
    IF
        \ файл имеет искомое расширение, делаем с ним что хотим
    THEN
;FOR-FILES
)#


Ну или можно 3 раза выполнить цикл FOR-FILES =-)
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Маски файлов для цикла For Files

Postby VoidVolker » Mon, 22 Jul 2013, 23:56

Code: Select all
FOR-FILES: "C:\path\*"
  FOUND-FILENAME S" /.*\.(mask1)|(mask2)|(mask3)/" RE-MATCH IF
    <полезный код>
  THEN
;FOR-FILES
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Маски файлов для цикла For Files

Postby Morituruz » Tue, 23 Jul 2013, 00:08

VoidVolker wrote:
Code: Select all
FOR-FILES: "C:\path\*"
  FOUND-FILENAME S" /(.*\.mask1)|(.*\.mask2)|(.*\.mask3)/" RE-MATCH IF
    <полезный код>
  THEN
;FOR-FILES

Да, так проще, зато меньше нового узнаём :D
+ можно упростить:
Code: Select all
FOR-FILES: "C:\path\*"
  FOUND-FILENAME S" /\.(mask1)|(mask2)|(mask3)$/" RE-MATCH IF
    <полезный код>
  THEN
;FOR-FILES
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Маски файлов для цикла For Files

Postby VoidVolker » Tue, 23 Jul 2013, 07:51

Morituruz wrote:Да, так проще, зато меньше нового узнаём

Да?
Code: Select all
: PATH-GET-NAME-EXT   \ ( a u -- a1 u1 a2 u2|0 )
  ONLYNAME
  2DUP S" ." BACK-SEARCH IF
    DUP >R
    2SWAP R> -
    2SWAP 1- SWAP 1+ SWAP
  ELSE
    S""
  THEN
;

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

Re: Маски файлов для цикла For Files

Postby Morituruz » Tue, 23 Jul 2013, 08:20

VoidVolker wrote:PATH-GET-NAME-EXT

Это фу а не решение, т.к. не учитывает, что точка может быть не одна:
Code: Select all
S" c:\path\2013.07.22_backup.exe" FILENAME2NAME&EXT TYPE CR TYPE CR
exe
c:\path\2013.07.22_backup
 Ok
S" c:\path\2013.07.22_backup.exe" PATH-GET-NAME-EXT TYPE CR TYPE CR
07.22_backup.exe
2013
 Ok
User avatar
Morituruz
 
Posts: 725
Joined: Sun, 14 Oct 2007, 01:51

Re: Маски файлов для цикла For Files

Postby VoidVolker » Tue, 23 Jul 2013, 10:22

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


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: ask and 2 guests

cron