Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Построение дерева каталогов (http://forum.oszone.net/showthread.php?t=149119)

kaster 28-08-2009 01:48 1205141

Построение дерева каталогов
 
Вложений: 2
Всем привет. очередной мой нубский опус из элементарных вещей, изученных мной при достижении азов данного языка.
На этот раз передо мной встала задача - построить древовидную структуру файлов и папок для составления отчета. после хождения по просторам интернета, ничего стоящего (бесплатных естественно) кроме Karen's directory print и zdp не нашел.
Но меня ждали разочарования по каждой из прог.
Первая всюду вставляет ненужные мне и моему начальству строки типа мэйд бай бла бла бла, а вторая в таком непотребном виде представляет, что смотреть уже не хочется.
Поэтому я решил осуществить сие дело своими (и AutoIt) силами.
И так - скрипт строит дерево каталогов в текстовом и html видах с указанием кол-во файлов и папок в конце. Во втором случае есть подсветка определенных типов файлов условно разбитых на категории, типа: текстовые файла, архивы, видео-файлы, аудио файлы и тд и также непосредственно перейти в нужную папку щелкнув по ссылке. При желании список можно легко дополнить внеся соответствующие изменения в include файл со списком расширений придерживаясь формата.
как обычно, ни на что не претендует, лично моим требованиям удовлетворяет.
если есть что сказать/исправить/дополнить, то как говорится - you're welcome.
PS: не выбирайте папки с большим кол-вом файлов, скорость оставляет желать лучшего.

Updated

Дополнено до версии 2 :dirol:

* немного исправлены разделители иерархии, как в текстовом так и в html-ном вариантах
+ время генерации файла с деревом

Маааленький апдейт до версии 2.1

+ Добавил favicon.ico

PS: имеется небольшой баг при наличии одних только папок, без файлов внутри в виде лишней полоски в html - варианте (см. скрин)
победить не смог, бился долго. может у кого возникнут идеи. буду только рад



PPS: Спасибо Creat0R'у за исправления по ускорению
Спасибо SyDr за подсказку о встроенной виндовой тулзе, которая легла за основу нового варианта html-версии построения

Creat0R 28-08-2009 05:14 1205166

Вложений: 1
Неплохо! :up

Я тут переделал немного(?) - ускорение плюс читабельность кода.

В архиве две версии...
- Первая более шустрая, но в ней есть минус - имена файлов и папок сортируются в том порядке, в котором были найдены.
- Вторая версия медленнее, т.к использует отдельные обработки файлов и папок, т.е для папок и файлов запускается новый поиск, что замедляет работу - но зато сортировка работает как и задуманно(?).

P.S
Для ускорения обработки циклов, кроме прочего я изменил метод поиска расширении файлов, тут быстрее искать через StringInStr, чем вызывать поиск в массиве который использует лишние циклы.

SyDr 28-08-2009 10:40 1205261

В состав винды входит программа TREE. Делает тоже самое. Правда, без всякого оформления.
Но вещь всё равно полезная. Спасибо.

kaster 28-08-2009 10:43 1205263

Привет, Creat0R
Спасибо за дополнения. Непривычно немножко из-за переобозначений, но для постороннего глаза, наверное, действительно читабельнее ;)
По поводу скорости - да, действительно, ускорение налицо. Причем даже во втором скрипте, где отдельно обрабатываются файлы и папки, как в моем скрипте.
Отсюда я делаю вывод, что вся медленность действительно была в поиске по расширениям через массивы, и возможно из-за filewriteline вместо filewrite с возвратом каретки в конце.
PS: я наверное возьму на вооружение именно второй вариант, так как мне кажется что лучше когда сначала идут папки а потом уже файлы в стиле total commander'а

Creat0R 28-08-2009 10:54 1205270

Цитата:

Цитата kaster
Непривычно немножко из-за переобозначений, но для постороннего глаза, наверное, действительно читабельнее »

Лучше привыкайте именно так писать, это принято в среде AutoIt'а.
Например строковые переменны префиксятся $s, массивы $a. Подробнее тут (Variable Names).

Цитата:

Цитата kaster
возможно из-за filewriteline вместо filewrite с возвратом каретки в конце »

Не совсем. Тут если присмотреться, накапливаются данные записи в файл в отдельную переменную, и файл открывается на запись лишь в конце, после поиска файлов.

kaster 28-08-2009 10:54 1205271

SyDr,
надо же изобрести колесо, иначе скушно :biggrin:
а оформление к выводу от TREE можно легко приделать при желании.
PS: спасибо, я не знал про эту прогу. сколько искал в гугле, ни одного упоминания почему-то о ней. Кстати работает он гораздо быстрее чем наши с Creat0R'ом скрипты

Цитата:

Цитата Creat0R
Не совсем. Тут если присмотреться, накапливаются данны :teeth: е записи в файл в отдельную переменную, и файл открывается на запись лишь в конце, после поиска файлов »

так я про то и говорю, накопить данные а потом хором написать, как мне кажется, быстрее, чем писать по строке каждый раз.
Цитата:

Цитата Creat0R
Лучше привыкайте именно так писать, это принято в среде AutoIt'а. »

я не к тому, что этот подход мне непривычен вообще, логику в этом я вижу, я имею в виду непривычно после того как я насмотрелся на свои переменные, без всяких префиксов :)

Creat0R 28-08-2009 11:08 1205282

Цитата:

Цитата kaster
так я про то и говорю »

Где?:

Цитата:

Цитата kaster
Отсюда я делаю вывод, что вся медленность действительно была в поиске по расширениям через массивы, и возможно из-за filewriteline вместо filewrite с возвратом каретки в конце. »

;)

Цитата:

Цитата kaster
я имею в виду непривычно после того как я насмотрелся на свои переменные, без всяких префиксов »

Префиксы там были своего рода, но очень смутные, не понять для чего служит какая переменная.

kaster 28-08-2009 11:13 1205285

Цитата:

Цитата Creat0R
Где?: »

Там же :biggrin:
Цитата:

Цитата kaster
Отсюда я делаю вывод, что вся медленность действительно была в поиске по расширениям через массивы, и возможно из-за filewriteline вместо filewrite с возвратом каретки в конце. »

Цитата:

Цитата Creat0R
Префиксы там были своего рода, но очень смутные, не понять для чего служит какая переменная. »

они были далеко не по этим причинам.
вобщем, я понял, возьму на вооружение ;)

amel27 28-08-2009 11:19 1205292

Цитата:

Цитата kaster
Кстати работает он гораздо быстрее чем наши с Creat0R'ом скрипты »

на то они и бинарники :)

kaster 28-08-2009 12:42 1205382

кстати, Creat0R, условие @extended при проверке на корень диска почему то не работает должным образом.
если поставить условие которые было у меня все норм. можешь проверить :)

Creat0R 28-08-2009 16:19 1205604

Цитата:

Цитата kaster
условие @extended при проверке на корень диска почему то не работает должным образом »

Да, я не был уверен для чего оно :)

Исправил:

Код:

    $sRoot_Name = ''

    If StringRight($sRoot, 2) = ':\' Then
        $sRoot_Name = 'Disk ' & StringTrimRight($sRoot, 2)
    Else
        $sRoot_Name = StringRegExpReplace($sRoot, '^.*\\', '')
    EndIf


kaster 05-09-2009 14:09 1212064

смотрим шапку

SyDr 05-09-2009 17:48 1212186

Повторить описанный в шапке баг не удалось))) [s]Зато другое вылезло:[/s]


Упс... Моя виноват. Забыл, что это в именах файлов подчеркивания)))
Но такого бага, как в шапке не наблюдаю. Можно структуру папки?

kaster 05-09-2009 20:49 1212285

Вложений: 1
Цитата:

Цитата SyDr
Но такого бага, как в шапке не наблюдаю. Можно структуру папки? »

не совсем понял. какую структуру? ту что вызывает баг?
возьми любую папку с подпапками, но без файлов, в самих подпапках файлы могут быть. пример в аттаче

kaster 05-09-2009 23:55 1212415

смотрим шапку (добавил favicon)

MikeLMB 30-05-2021 21:04 2959241

Добрый день, а как дополнить программу выводом размера и/или даты изменения файла?


Время: 18:40.

Время: 18:40.
© OSzone.net 2001-