|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
AndreyMp, objFSO As New FileSyste - не определён, и в references нет FSO! Пожалуйста,дайте работающий код! Если можно, помогите решить задачу: Есть папка "А", содержащая только папки "В", содержащие файлы "С". Нужно в каждой "С" вызвать первый файл для его обработки. Все имена - цифровые, тип файлов - ".dcm". Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 08:33 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, > и в references нет FSO! а скрин этого можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 09:06 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
катастрофа, Вот всё,что там есть на "F". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 15:24 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123 А Вы поищите на "S" Вас должно заинтересовать Microsoft Scripting Runtime ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2012, 08:21 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Можно без FSO, с помощью консольной команды DIR. Пример тут, можно допилить под конкретную задачу: http://www.cyberforum.ru/vba/thread645716-page2.html#post3413444 Нужно в каждой "С" вызвать первый файл для его обработки. " - Вы имеете в виду первый при сортировке по алфавиту, самый ранний или самый поздний файл? В любом случае, это решается ключом сортировки в команде DIR: Код: plaintext 1. 2. 3.
Ну а чтобы выделить только один файл из папки, можно сложить пути файлов в коллекцию, используя в качестве ключа путь к папке (т.е. путь файла до последнего "\"). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2012, 13:37 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Казанский, Большое спасибо за помощь всем! Я сделал с Dir, список всех подпапок создаётся, но не передаётся во вторую часть, попытка декларировать List1 As Control не проходит. Что можно сделать? Dim X As String, A As String, i As Single, Z As String Private Sub form_load() i = 0 Y = "d:\A\" X = Dir(Y, 16) Do While Not X = "" List1.List(i) = X + Chr(10) X = Dir i = i + 1 Loop Form1.Visible = True List1.Visible = True k = i - 1 End Sub Private Sub command1_click() For k = 2 To i ' пропуск "." & ".." Z = Y + List1.List(k) G = Dir(Z, vbDirectory) 'Bad file namt or number Next k 'передача файла на обработку End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2012, 23:24 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 02:15 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Это уже было! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 09:47 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123Это уже было! fel123, скажите, а весь этот код он в какой-нибудь процедуре записан? Или вот так как есть в разделе объявлений модуля? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 09:58 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Понял - нужно добавить sub form_load(). Код отлично работает. СПАСИБО ВСЕМ! Но у меня ещё вопрос по работе. Я вообще-то электронщик (военный), но с 69 года работаю в медицине. Программирую по необходимости. Ситуация такая: раньше eFilm создавал свои таблицы в acsses97, но в новой версии используется sql server 2005 express. Поскольку это форум sql, то прошу помочь мне прочитать таблицы этого sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 10:21 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Модератор: Создавайте отдельный топик ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 10:31 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
mds_world, Я рано обрадовался, но виноват сам - ошибся в постановке задачи. На самом деле структура такая: папка A содержит папки B (Study), каждая B содержит папки C (Series), и только каждая C содержит файлы D (Images). Я помучился, добавил вторую часть кода, но не могу понять, почему вместо первого файла D, соответствующего папке A, получаю список всех D, соответствующих папке A. Т.е. во второй части кода не проходит цикл по папкам A (цикл по i)? Уже мозги плавятся! SOS! Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 22:59 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
VladConn, ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 23:28 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123 , и каков вопрос? Если про Dim ... as New ... , то видимо HandKot fel123 А Вы поищите на "S" Вас должно заинтересовать Microsoft Scripting Runtime ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2012, 00:32 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, попробуйте вариант с рекурсивной процедурой обхода папок Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2012, 01:06 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
mds_world, Привет! Этот код выдаёт всё подряд: и файлы, и папки. Если закомментирова второй Debug.Print, то выдаются все файлы подпапок (С). Для работы мне нужно из каждой подпапки (B) исходной папки (А) по одному из множества файлов подпапок (C), т.е. каждой (B) cоответствует один файл. В GOOGLE нашел интересный момент: For Each element [ As datatype ] In group [ statements ] [ Exit For ] [ statements ] Next [ element ] Компоненты: element Обязателен в операторе For Each. Необязателен в операторе Next. Переменная. Используется для циклическогопрохода (итерации) элементов коллекции. datatype Обязателен, если еще не объявлен элемент element. Тип данных element. group Обязательный компонент. Объектная переменная. Указывает на коллекцию, применительно к элементам которой будут повторяться операторы statements. statements Необязательный компонент. Один или несколько операторов, стоящих между операторами For Each и Next и выполняющихся применительно к каждому элементу group. Exit For Необязательный компонент. Передача управления из цикла For Each. Next Обязательный компонент. Завершение определения цикла For Each. Источник: http://msdn.microsoft.com/ru-ru/library/5ebk1751%28v=vs.90%29.aspx По идее, нужно прерывать цикл по B, как только нашёлся первый ".dcm". Можно, конечно, сделать фильтр списка файлов на уникальность элемента B, но исполняемый код будет очень долго работать. А мне ещё файлы обработать нужно! Я пока не понимаю, как работают циклы в FSO, т.е. не знаю, как вставить Exit For. Если есть время, помогите! Спасибо! P.S. Пока писал, подумал, что, наверное, в цикле по oFile можно проверить атрибут, но есть-ли в FSO что-то типа File.Attribute.Name? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2012, 18:47 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Вот так эта часть Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2012, 22:33 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Казанский, Доброго времени суток! Спасибо за науку. Только этот код выдает первые файлы всех подпапок последнего уровня, а нужно для каждой подпапки папки А только один файл. ОчевидноБ нужна внешняя процедура на уникальность имени подпапки В, что-то вроде Sub Filtr(Spath,Z) Const startB As String = ":\" Const endB As String = "\" x = InStr(sPath, startB) y = InStr(sPath, endB) Dim temrB As String Dim temrorB As String Mid(sPath, x, y - x) = tempB If tempB <> temporB Then tempB = temporB Exit For (если внутри, или z=False, если Sub) End If End Sub Я попытался так сделать, но запутался в логике. Как нужно? Ещё раз благодарю ВАС! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2012, 22:36 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Модератор: fel123, еще раз предупреждаю про использование тэгов для оформления кода ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2012, 01:16 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
> fel123, > На самом деле структура такая: папка A содержит папки B (Study), каждая B содержит папки C (Series), и только каждая C содержит файлы D (Images) ох уж енти ваенныя електронщыки ... могабукаф Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2012, 19:23 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
скукотища, Наконец-то получилось то, что было нужно. Вот работающий код: Option Explicit Dim oFSO As Object Public temporB As String Public i As Integer, j As Integer Sub Form_load() i = 0 Const sPath As String = "d:\A\" Set oFSO = CreateObject("Scripting.FileSystemObject") Call recurse(sPath) End Sub Sub recurse(sPath As String) Dim oFolder As Object Dim oSubFolder As Object Dim oFile As Object Set oFolder = oFSO.GetFolder(sPath) For Each oFile In oFolder.Files Dim Nam As String If LCase(oFile.Name) Like "*.dcm" Then Nam = sPath & "\" & oFile.Name Call Filtr(Nam) Exit For End If Next oFile For Each oSubFolder In oFolder.SubFolders Call recurse(oSubFolder.Path) Next oSubFolder Call Osnova End Sub Sub Filtr(Nam) Dim x As Long, y As Long, z As Long Dim tempB As String x = InStr(Nam, ":\") y = InStr(x + 2, Nam, "\") z = InStr(y + 1, Nam, "\") tempB = Mid(Nam, y + 1, z - y - 1) If tempB <> temporB Then temporB = tempB List1.List(i) = Nam i = i + 1 End If End Sub Sub Osnova() For j = 0 To List1.ListCount 'Обработка Next j End Sub Остались два нерешенных вопроса: как скрыть окно Immediate и как перед вызовом Osnova очистить память от мусора FSO (Nothing не проходит). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:05 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, "как скрыть окно Immediate" - у этого окна должен быть крестик в правом верхнем углу. "как перед вызовом Osnova очистить память от мусора FSO" - Set его как New FileSystemObject, декларировать также, а не как Object. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:30 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123VladConn, Ссылочку поставь на Scripting... в проекте... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:35 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Что это такое: Код: vbnet 1. 2. 3.
Что ты пытаешься вытащить этими манипуляциями? Части путей, имен, явок, расширений? А почему ты тогда не используешь готовые методы oFSO, зачем он тогда тебе? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:40 |
|
|
start [/forum/topic.php?fid=60&msg=37969863&tid=2157410]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 172ms |
0 / 0 |