| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > прочитать вложенные директории |
| Автор: murka 31.7.2006, 15:34 |
| Читаю директорию и делаю определенные действия над каждым из её объектов. Вложенность неопределена, нужно просмотреть все файлы во всех папках. Запуталась! Как определять папка это или файл и читать директорию могу, а вот как идти дальше во вложенные директории и вернуться обратно - не пойму! Может кто чего подскажет! |
| Автор: Nab 31.7.2006, 16:54 |
| Выделить в отдельную функцию, и вызывать рекурсивно... Можно с заходом в каждую директорию, можно по полному пути .... выбирайте как удобней... |
| Автор: korob2001 31.7.2006, 17:16 | ||||||
| Вот написал пример, без рекурсии и сторонних модулей. Подробности смотри в комнтариях. Файл: scan.pl
Запускаешь из командной строки, например вот так: perl scan.pl C:/WINDOWS Врезультате, в том же каталоге, где находится сам файл scan.pl будет создан текстовый файл all_file.txt, в котором будет сохранён список всех вложенных файлов в указанном каталоге, а также и вложенных каталогах. ЗЫ: Код было бы не плохо ещё немного доработать, а так же сократить. Я специально использовал длиные записи, например вот это условие:
можно было бы записать и вот так:
С другой стороны, в этом же условии записывать в файл, только в том случае, если он действительно является файлом, а не чем нить ещё. Потому else можно заменить на elsif(условие), если это конечно нужно. |
| Автор: korob2001 31.7.2006, 18:50 | ||
Вот аналогичный пример с рекурсией:
Программа намного меньше, но с примером без рекурсии можно сделать тоже самое. |
| Автор: Nab 31.7.2006, 19:21 | ||||||
| Мне метод без рекурсии очень понравился, хотя запись в файл в качестве примера не годиться, лучше построить хеш... А вот второй пример, мне не очень Я его немного переделаю...
В лучших традициях допишу Вот эта конструкция:
может быть заменена на :
Но как по мне развернутая форма выигрывает в читабельности |
| Автор: korob2001 1.8.2006, 01:07 |
Я не спорю, просто некоторые товарисчи предпочитают писать компактно, желательно вообще в одну строку. |
| Автор: Nab 1.8.2006, 01:21 | ||
Не спорю, но мы же не ПерлГольф играем, а помогаем народу понять как оно работает А если у человека, в особенности у начинающего, вопрос, а он видит ТАКОЕ, что даже прочитать не может, то кому такая помощь нужна? И так все знают кто здесь модер А те, кто предпочитают писать в одну строчку, обычно задают очень нетривиальные вопросы и знают чего хотят добиться в результате |
| Автор: aksined 2.8.2006, 08:55 | ||
| Если вы хотите помочь человеку с обработкой всех файлов, то хотя бы расскажите, как это сделать с помощью модуля, который входит в стандартную поставку. Ставить не надо, а использовать несложно. Для вас написать несколько красивых решений - это одно. А человек потом все рвно вряд ли будет оформлять функции в виде модуля. Будет их копировать из скрипта в скрипт.
функция find получает список каталогов, ко всем элементам которых будут применена функция, переданная как первый параметр #человек не написал, ему нужно САМОМУ научиться обходить дерево каталогов, или просто нужно обработать все файлы. Если второе, то не нужно писать так много кода |
| Автор: Nab 2.8.2006, 11:44 |
| Абсолютно поддерживаю... Вообще, наработанную годами базу в виде стандартных модулей и CPAN глупо игнорировать, ее изучать надо и использовать... |
| Автор: korob2001 2.8.2006, 22:27 | ||
Ну не знаю, я лично пытался помочь человеку с этим:
Не думаю, что здесь человек спрашивал о модуле File::Find, насколько я понял она хотела понять принцип того, как предвигаться по каталогам сверху вниз и в обратном направлении. Да и я считаю, главное понять смысл, потому в первом примере каждая строка прокоментирована. А там глядишь, она напишет свой аналог File::Find, а может ещё чего-нить покруче, независимый от последнего. ЗЫ: Гораздо надёжнее ездить на автомобиле, зная не то лько ПДД, но ещё и устройство автомобиля. Только не подумайте, что ярый противник CPAN, просто некоторые вещи я делаю вручную, точнее я стараюсь как можно меньше привязываться к какому-нить модулю. |
| Автор: aksined 3.8.2006, 12:36 |
| Просьба не воспринимать мое сообщение как критику. Вы готовы помочь - это главное. Причем в ситуациях, когда человек ленится почитать документацию или книгу (ко мне это тоже относится). Я не сторонник и не протифник cpan. Просто, мне кажется, что большей части людей, если и будет нужно понять, как произвести обход дерева(с рекурсией или без), потом все равно нужно будет использовать фунцию из модуля (своего или нет). Почему бы не рассказать о стандартных решениях. |