Копирование файлов в зависимости от присутствия текста
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Копирование файлов в зависимости от присутствия текста
Здравствуйте ! Мне нужно повесить на кнопку следующий алгоритм :
Есть каталог «Родитель» . Курсор стоит на этом каталоге . В нем куча подкаталогов ( в них в свою очередь тоже своё дерево подкаталогов ) .В конце каждого конечного подкаталога ( в конце дерева) могут быть файлы типа «данные.csv».
Если находим нужные фрагменты текста в файлах csv ( например слово «в архив» или «утверждено») , то нужно скопировать и заархивировать файлы с нужными нам расширениями + если в названии имени файла есть зарезервированные слова .
Например все файлы типа «подписано*.doc» , «утверждено*.prn» и др…
Скопировать надо по заданному пути в текущую дату .
Архив должен иметь название «Родитель». ( например D:\Архив\ 13042012\Родитель.rar).
Есть каталог «Родитель» . Курсор стоит на этом каталоге . В нем куча подкаталогов ( в них в свою очередь тоже своё дерево подкаталогов ) .В конце каждого конечного подкаталога ( в конце дерева) могут быть файлы типа «данные.csv».
Если находим нужные фрагменты текста в файлах csv ( например слово «в архив» или «утверждено») , то нужно скопировать и заархивировать файлы с нужными нам расширениями + если в названии имени файла есть зарезервированные слова .
Например все файлы типа «подписано*.doc» , «утверждено*.prn» и др…
Скопировать надо по заданному пути в текущую дату .
Архив должен иметь название «Родитель». ( например D:\Архив\ 13042012\Родитель.rar).
Rustem
За подобный коловрат не берусь, но несколько вопросов для облегчения реализатору (если вдруг такой появится) задам.
1. Почему так усложнён подход? Эти csv-файлы нельзя сделать обычным текстом и поместить их в корневые папки? Почему эти файлы должны быть именно в самом глубоком каталоге?
2. Этот последний каталог в каком из подкаталогов первого уровня должен находится? Как это определять?
3. Файлы с нужными расширениями на каких глубинах находятся? На разных или на конкретных?
4. Правильно я понимаю, что все файлы должны паковаться в один архив, а не в отдельные?
За подобный коловрат не берусь, но несколько вопросов для облегчения реализатору (если вдруг такой появится) задам.
1. Почему так усложнён подход? Эти csv-файлы нельзя сделать обычным текстом и поместить их в корневые папки? Почему эти файлы должны быть именно в самом глубоком каталоге?
2. Этот последний каталог в каком из подкаталогов первого уровня должен находится? Как это определять?
3. Файлы с нужными расширениями на каких глубинах находятся? На разных или на конкретных?
4. Правильно я понимаю, что все файлы должны паковаться в один архив, а не в отдельные?
Ответ Flasher-у :
1. Архив данных формировался начиная с 90-х годов. И ничего уже там не изменишь . Там файлы в которых надо искать текст в формате csv ( и они разные : где-то есть нужный текст , где-то нет ) . Файлы csv находятся в самом глубоком каталоге.
2. Самый глубокий каталог находится максимум во 2-ом уровне относительно Родителя ( D:\Родитель\потомок_1\ , D:\Родитель\потомок_2\ , D:\Родитель\потомок_N\ )
3. Соответственно п.2 файлы с нужными расширениями находятся на одной глубине вложенности относительно каталога "Родитель".
4. Все файлы должны паковаться в один архив . Если есть совпадающие имена файлов , то можно добавить к имени файла добавляемого файла _2, _3 , _4 и т.д.
1. Архив данных формировался начиная с 90-х годов. И ничего уже там не изменишь . Там файлы в которых надо искать текст в формате csv ( и они разные : где-то есть нужный текст , где-то нет ) . Файлы csv находятся в самом глубоком каталоге.
2. Самый глубокий каталог находится максимум во 2-ом уровне относительно Родителя ( D:\Родитель\потомок_1\ , D:\Родитель\потомок_2\ , D:\Родитель\потомок_N\ )
3. Соответственно п.2 файлы с нужными расширениями находятся на одной глубине вложенности относительно каталога "Родитель".
4. Все файлы должны паковаться в один архив . Если есть совпадающие имена файлов , то можно добавить к имени файла добавляемого файла _2, _3 , _4 и т.д.
Rustem
Если есть возможность - лучше вынести нужные ключевые слова типа "подписано, утверждено..." в конец имени файла (ну, или первые две-три буквы, чтобы не захламлять, например, нечто вроде "347856_пп_утв.csv"). Если бы не нужно было проводить поиск в содержимом, а достаточно только по именам - было бы намного проще. Тем более, как я вижу, если допускается добавление некоторого количества знаков в конец - это будет рациональным решением.
О том, как это можно дописать, думаю, слова "поиск по содержимому" и "групповое переименование" с чтением справки по ним прояснят ситуацию с дописыванием нужных слов в конце.
Если же эти "дописи" уже есть в именах - тогда задача моментально упрощается:
• заходим в нужного "потомка_№***",
• жмакаем Ctrl+B (плоский вид),
• далее в выделение по Num-Plus задаём какие файлы нам нужны (масками вида *_утв*.*, *_пп*.*, главное, чтобы эти приписки в конце были уникальны и не пересекались с названиями документов)
• "упаковать...", дальше - как обычно, с упаковкой ничего особенного.
При этом в конечном архиве не будет совпадающих путей, и, следовательно, необходимость дописывать числа (типа "_2", "_3" и т.д.) просто отпадает.
Просто и гениально.
Если есть возможность - лучше вынести нужные ключевые слова типа "подписано, утверждено..." в конец имени файла (ну, или первые две-три буквы, чтобы не захламлять, например, нечто вроде "347856_пп_утв.csv"). Если бы не нужно было проводить поиск в содержимом, а достаточно только по именам - было бы намного проще. Тем более, как я вижу, если допускается добавление некоторого количества знаков в конец - это будет рациональным решением.
О том, как это можно дописать, думаю, слова "поиск по содержимому" и "групповое переименование" с чтением справки по ним прояснят ситуацию с дописыванием нужных слов в конце.
Если же эти "дописи" уже есть в именах - тогда задача моментально упрощается:
• заходим в нужного "потомка_№***",
• жмакаем Ctrl+B (плоский вид),
• далее в выделение по Num-Plus задаём какие файлы нам нужны (масками вида *_утв*.*, *_пп*.*, главное, чтобы эти приписки в конце были уникальны и не пересекались с названиями документов)
• "упаковать...", дальше - как обычно, с упаковкой ничего особенного.
При этом в конечном архиве не будет совпадающих путей, и, следовательно, необходимость дописывать числа (типа "_2", "_3" и т.д.) просто отпадает.
Просто и гениально.
2Rustem
2. СSV-файлы могут на первом уровне вложенности находиться? Или они только на втором?
Родитель - это выделенная папка или рабочая? Если выделенная, то смотреть нужно последний каталог каждого из подкаталогов и брать файлы из него, а не всех сразу, что в родителе, учитывая данные всех csv родителя в сумме?
2. СSV-файлы могут на первом уровне вложенности находиться? Или они только на втором?
Родитель - это выделенная папка или рабочая? Если выделенная, то смотреть нужно последний каталог каждого из подкаталогов и брать файлы из него, а не всех сразу, что в родителе, учитывая данные всех csv родителя в сумме?
Flasher-у:
2. Файлы csv могут и на первом уровне вложенности находится , но проверка на наличие текста в csv-файле нужна только для второго уровня и по результату поиска в файле csv брать файлы для копирования и архивации только из каталогов второго уровня .
Родитель - это папка на котором стоит курсор. Она ( эта папка ) не выделена ( папка на активной панели видимо получается) .
Mellomann-у :
Нужно проводить поиск именно в СОДЕРЖИМОМ файла csv , т.к. он называется стандартно во всех подкаталогах: "данные.csv" .
Так что никаких "дописей" в именах увы нет .
И да, кстати, задача то стоит в том, чтобы получился ОДИН архив под именем "Родитель.rar" , а не куча архивов под именем потомок_1.rar , . . . , потомок_N.rar .
2. Файлы csv могут и на первом уровне вложенности находится , но проверка на наличие текста в csv-файле нужна только для второго уровня и по результату поиска в файле csv брать файлы для копирования и архивации только из каталогов второго уровня .
Родитель - это папка на котором стоит курсор. Она ( эта папка ) не выделена ( папка на активной панели видимо получается) .
Mellomann-у :
Нужно проводить поиск именно в СОДЕРЖИМОМ файла csv , т.к. он называется стандартно во всех подкаталогах: "данные.csv" .
Так что никаких "дописей" в именах увы нет .
И да, кстати, задача то стоит в том, чтобы получился ОДИН архив под именем "Родитель.rar" , а не куча архивов под именем потомок_1.rar , . . . , потомок_N.rar .
А как же?:Rustem писал(а):Самый глубокий каталог находится максимум во 2-ом уровне относительно Родителя
Rustem писал(а):В нем куча подкаталогов ( в них в свою очередь тоже своё дерево подкаталогов )
>>Rustem писал(а):в файле csv брать файлы для копирования и архивации только из каталогов второго уровня .
т.е. csv+csv+.. = exts всех подкаталогов родителя или csv1 = exts одного подкаталога, csv2 = exts другого подкаталога и т.д.?Flasher писал(а):смотреть нужно последний каталог каждого из подкаталогов и брать файлы из него, а не всех сразу, что в родителе, учитывая данные всех csv родителя в сумме?
Flasher-у :
На счет "В нем куча подкаталогов ( в них в свою очередь тоже своё дерево подкаталогов ) " - все правильно , только там нет нужных нам файла csv , и файлов которые надо скопировать и заархивировать . Там вспомогательная инфа, её можно не учитывать, т.к. нужных файлов для копирования там нет. Так что работаем только с каталогом второго уровня.
Смотреть нужно КАЖДЫЙ каталог ВТОРОГО уровня и брать файлы из него , если там встречается искомый текст в csv файле .
На счет "В нем куча подкаталогов ( в них в свою очередь тоже своё дерево подкаталогов ) " - все правильно , только там нет нужных нам файла csv , и файлов которые надо скопировать и заархивировать . Там вспомогательная инфа, её можно не учитывать, т.к. нужных файлов для копирования там нет. Так что работаем только с каталогом второго уровня.
Смотреть нужно КАЖДЫЙ каталог ВТОРОГО уровня и брать файлы из него , если там встречается искомый текст в csv файле .