![]() |
Список файлов и папок в заданной директории
мне сделали такой код
Код:
Function DirList(Pth As String) As String() А то в этом коде я не бум бум. А автор кода не хочет объяснять. Помогите пожалуйста. Все это было как получить дерево файлов и папок в заданной дериктории? И все это в двумерный массив засунуть из 3х столбцов, в который если это папка в соседние столбцы дописывать 0 0 0755? К такому вот виду, например: Код:
system/app/AdupsFota 0 0 0755 |
«Поубивав бы»™.
Цитата:
Код:
Debug.Print D(1, i&); " "; D(2, i&); " "; D(3, i&) Код:
Debug.Print D(1, i&) & " 0 0 0755" |
Цитата:
|
Простите, а где Вы там видите папки? Я — не вижу. Только файлы с полными путями.
|
Цитата:
Тогда переходим к пункту - свой вариант ;) |
Цитата:
Код:
Option Explicit |
Iska, почти, надо еще имя папки в пути, которая сканируется.
В вашем примере будет выглядеть примерно так test\папка1 test\папка2\файл1 |
Цитата:
Код:
ScanSubFolders objFSO.GetFolder(strSourceFolder), Len(objFSO.GetParentFolderName(strSourceFolder)) + 1 |
Iska, отлично! То что нужно. Спасибо.
|
Iska, потыкался, так и не смог это всё хозяйство в массив засунуть. Дайте подсказку?
|
blackeangel, «шо, опять?»™ ;). Дались Вам эти массивы.
Что Вы планируете с ним дальше делать? |
Цитата:
Дальше, мы его будем делать двухмерным, по тем самым регуляркам, что тогда так долго пытали. Далее заполнять оставшиеся не заполненные 3 столбца напротив файлов, читая данные из файла и/или же из правил по вхождению имени файла. Формировать отчет в новом конечном файле, используя данные из массива. Как то так. |
Iska,
Ну раз вы так настраиваете на словаре, то дайте сводную таблицу двумерный массив|коллекция|словарь в которой отображены все плюсы и минусы, на русском языке. И где по-человечески дано определение ключа. Я вот этого не понимаю. Хотя, давайте посмотрим как это будет выглядеть в словаре или коллекции ;) |
blackeangel, дык, я не настаиваю именно на словаре. Я просто пишу, что массивы в данном случае явно не лучший выбор. Почему — потому что вижу многомерные массивы вкупе со множественными ReDim и ReDim Preserve. Я бы ещё понял, если бы Вы пользовали одномерный массив из структур (Type Statement). Словарь — это, собственно, тот же массив, только ассоциативный. Вместо многомерного массива используется тот факт, что его элементами могут быть не только простые типы данных, но и другие, «вложенные», словари.
Цитата:
Цитата:
В общем, вот такой Вам примерчик, с использованием простого и незатейливого средства — набора записей (RecordSet): Скрытый текст
Код:
Option Explicit Конечным итогом будет, как Вы и просили, двумерный массив arrFoldersAndFiles. В свойствах проекта необходимо добавить ссылку на Microsoft ActiveX Data Objects Library (их может быть несколько, выбирайте не ниже 2.8, выше — можно). Использование словарей/ассоциативных массивов или наборов записей (RecordSet) уместно там, где нам заранее неизвестен конечный размер данных, потому как в этих случаях мы можем легко и произвольно его наращивать (в отличие от обычного массива, который требует предварительного указания точного размера). Цитата:
Главный недостаток класса Scripting.Dictionary — в нём в принципе нет возможности обратиться к элементу коллекции по порядковому номеру. Позже, когда Microsoft делала .Net, в нём это было исправлено, и класс .Net System.Collections.ArrayList (ArrayList Class (System.Collections)) получил такую возможность. Кстати, данный класс может также использоваться не только как класс .Net, но и ограниченно — как объект Automation (может потребоваться принудительная регистрация его библиотеки), со всеми его приятственными плюшками. Например: VBScript Scripting Techniques: ArrayLists. |
Цитата:
1)посчитать кол-во файлов и папок и получить конкретный размер массива. 2)Можно писать в переменную, а потом сплитить и получить тот же массив. Или эти варианты имеют подводные камни? |
1. В данном случае — можно посчитать. Минус — придётся делать двойной проход по дереву (второй проход, конечно, должен быть быстрее, поскольку всё дерево или хотя бы его часть будет в кэше). Но есть варианты, когда заранее тупо неизвестно количество, и нет возможности второго прохода/разбора.
2. Можно, но ещё накладнее. Работа со строками в VBScript/VBA/VB очень медленная (с точки зрения машинного времени, разумеется). |
Цитата:
Для решения своей задачи, могу ограничить массив 20к и удалять пустые строки из массива. Давайте разберём оба варианта? Ибо эти решения можно будет занести в ГДЗ. |
Цитата:
Цитата:
|
Время: 05:38. |
Время: 05:38.
© OSzone.net 2001-