Сортировка по имени

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

Сортировка по имени

Postby R(0)b » Sat, 24 Jul 2004, 08:06

Чайник нуждается в помощи :)

Есть задача:

Файлы из одной и той-же директории необходимо разнести по разным папкам. Притом, чтоб эти папки брали название из имени файла, минус 10 последних знаков.

Пример: файл AAA_2004_07_23_23-10.log перeместить во вновь созданую папку ААА_2004_07 и так далее по циклу.

Прошу особо не пинать - я экономист, а не програмист :) Поэтому по возможности давайте или весь код или основные части.

Заранее благодарен за помощь.
Last edited by R(0)b on Sat, 24 Jul 2004, 11:40, edited 2 times in total.
User avatar
R(0)b
 
Posts: 4
Joined: Sat, 24 Jul 2004, 07:37

Postby Valery_Kondakoff » Sat, 24 Jul 2004, 09:31

цикл FOR-FILES:, DIR-CREATE:, FILE-MOVE: и регулярные выражения. Скажем:
Code: Select all
FOR-FILES: "C:\TEMP\*.*"
RE-MATCH: "%FOUND-FILENAME%" "/(.*)..........\..../i"
        IF
            DIR-CREATE: "D:\TEST\%$1%"
            FILE-MOVE: "%FOUND-FULLPATH%" "D:\TEST\%$1%"
        THEN
;FOR-FILES
В регулярном выражении поставь нужное количество "точек".
CU
VK
User avatar
Valery_Kondakoff
Site Admin
 
Posts: 769
Joined: Thu, 01 Jul 2004, 20:49
Location: Moscow, Russia

Postby R(0)b » Sat, 24 Jul 2004, 11:39

Благодарю, конечно, за помощь. Только у меня почему-то не работает.
Точнее выдаёт синтаксическую ошибку в 3-ей строке:

Code: Select all
#( Сортировка_по_директориям
WatchFile: "C:\Win\log\*.log"
FOR-FILES: "C:\Win\log\*.log"
RE-MATCH: "%FOUND-FILENAME%" "/(.*)....................\..../i"
        IF
            DIR-CREATE: "D:\BU\Log\%$1%"
            FILE-MOVE: "%FOUND-FULLPATH%" "D:\BU\Log\%$1%"
        THEN
;FOR-FILES
)#


И второй вопрос - как быть, если количество символов в именах этих файлов разныe, а имя дирректории необходимо сделить на эти 10 символов с конца меньше?

Пример:
AAA_2004_07_23_10-02.log
MyIE2_2004_07_23_10-00.log
X_2004_07_23_09-58.log - и надо переместить соответственно в директории:
AAA_2004_07_23
MyIE2_2004_07_23
X_2004_07_23


Неужели для каждого отдельного случая надо писать новое правило?
А если таких случаев 30... Или 200 к примеру. :(
User avatar
R(0)b
 
Posts: 4
Joined: Sat, 24 Jul 2004, 07:37

Postby Valery_Kondakoff » Sat, 24 Jul 2004, 13:53

Слушай, программист ты или экономист, но доку нехреново было бы почитать... После WatchFile: и до FOR-FILES: добавь строку Action:. Без этого ничего работать не будет.

Почитай также, плз, про регекспы. "Точка" - это один любой символ. "\." - это точка. Поэтому регексп "/(.*)..........\..../i" отбирает все, кроме трех символов расширения, точки и еще десяти символов с конца. Но в твоем случае этих символов, кстати, не десять, а девять. У тебя в школе что было по арифметике?
CU
VK
User avatar
Valery_Kondakoff
Site Admin
 
Posts: 769
Joined: Thu, 01 Jul 2004, 20:49
Location: Moscow, Russia

Postby R(0)b » Sat, 24 Jul 2004, 15:13

За Action: прошу не пристреливать - лаханулся... :Hangman:
А с регекспами до сих пор не разобрался - так что как это (см. выше) работает - для меня тайна :) Хотя всё заработало, за что большое человеческое благодарю ув.Valery_Kondakoff
User avatar
R(0)b
 
Posts: 4
Joined: Sat, 24 Jul 2004, 07:37

Postby R(0)b » Sat, 24 Jul 2004, 20:01

Да, кстати, для таких как я чайников - работающий таб (при перемещении добавляет к имени файла вначале дату и время перемещения):

Code: Select all
#( Перемещение_с_созданием_директории
WatchFile: "С:\Windows\log\*.log"   \ за какими файлами и где следить
Action:
FOR-FILES: "С:\Windows\log\*.log"
RE-MATCH: "%FOUND-FILENAME%" "/(.*)......\..../i"   \ указать необходимое кол-во символов для удаления
        IF
            DIR-CREATE: "D:\BU\Log\%$1%"   \ где создавать директорию для перемещения
     FILE-EXIST: "D:\BU\Log\%$1%\%FOUND-FILENAME%" 
   GET-CUR-TIME
    CASE
     0 OF FILE-MOVE: "%FOUND-FULLPATH%" "D:\BU\Log\%$1%\%FOUND-FILENAME%" ENDOF
     DUP OF FILE-MOVE: "%FOUND-FULLPATH%" "D:\BU\Log\%$1%\%DD%-%MM%-%YY% %hh%-%mm%-%ss% %FOUND-FILENAME%"   \ добавить к имени файла день, месяц, год и время перемещения
ENDOF
ENDCASE
        THEN
;FOR-FILES
)#


P.S. Может есть смысл создать дополнительный раздел или отдельную тему для подобных примеров? Думаю многим помогли б уже готовые коды, чем их писать заново (это только моё личное мнение!)
User avatar
R(0)b
 
Posts: 4
Joined: Sat, 24 Jul 2004, 07:37


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 5 guests