Все, что об этом файле известно - он находится в той же папке, где и основной, и других файлов в этой папке нет. И что он - эксель. Ни имя и расширение файла, а также имя и расположение папки не известны. Возможно? Если возможно - как?
Все, что об этом файле известно - он находится в той же папке, где и основной, и других файлов в этой папке нет. И что он - эксель. Ни имя и расширение файла, а также имя и расположение папки не известны. Возможно? Если возможно - как?Michael_S
Зачем же такие извороты? не проще воспользоватся многострочным If?
мой велосипед. Особо не тестировал, но должен работать )
[vba]
Код
Sub Example() Set Folder = GetFileList("d:\Contacts\") End Sub
' ---------------------------------------- ' Returns collection files of folder ' ' @param {String} Path The path to folder ' @param {String} [Filter] The file filter ' @return {Collection} FileList ' ---------------------------------------- Private Function GetFileList(ByVal Path As String, _ Optional ByVal Filter As String = "*") As Collection Static List As New Collection Static FSO As Object Static Deep As Integer Dim SubFolder As Object Dim Folder As Object Dim File As Object
If FSO Is Nothing Then Set FSO = CreateObject("Scripting.FileSystemObject") End If
If FSO.FolderExists(Path) Then Set Folder = FSO.GetFolder(Path)
For Each File In Folder.Files If File.Name Like Filter Then List.Add File End If Next
For Each SubFolder In Folder.SubFolders Deep = Deep + 1 GetFileList SubFolder.Path, Mask Next
Deep = Deep - 1 End If
If Deep = -1 Then Set GetFileList = List Set List = Nothing Set FSO = Nothing Deep = 0 End If End Function
[/vba] впрочем, уже вижу косяк но не критичный )
Цитата (Vitalts)
If fn <> .Name Then: _ Debug.Print fn fn = Dir
Зачем же такие извороты? не проще воспользоватся многострочным If?
мой велосипед. Особо не тестировал, но должен работать )
[vba]
Код
Sub Example() Set Folder = GetFileList("d:\Contacts\") End Sub
' ---------------------------------------- ' Returns collection files of folder ' ' @param {String} Path The path to folder ' @param {String} [Filter] The file filter ' @return {Collection} FileList ' ---------------------------------------- Private Function GetFileList(ByVal Path As String, _ Optional ByVal Filter As String = "*") As Collection Static List As New Collection Static FSO As Object Static Deep As Integer Dim SubFolder As Object Dim Folder As Object Dim File As Object
If FSO Is Nothing Then Set FSO = CreateObject("Scripting.FileSystemObject") End If
If FSO.FolderExists(Path) Then Set Folder = FSO.GetFolder(Path)
For Each File In Folder.Files If File.Name Like Filter Then List.Add File End If Next
For Each SubFolder In Folder.SubFolders Deep = Deep + 1 GetFileList SubFolder.Path, Mask Next
Deep = Deep - 1 End If
If Deep = -1 Then Set GetFileList = List Set List = Nothing Set FSO = Nothing Deep = 0 End If End Function
[/vba] впрочем, уже вижу косяк но не критичный )nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
nerv, эээ, и вы утверждаете что у меня извороты? Чем вам Dir не угодил? Похоже, изначально не правильно понял вас. В данном случае, мне караз таки было удобнее воспользоваться однострочным if, дабы не закрывать, а перенос для наглядности. Кстати, проверки названий файлов на самого себя у вас нет.
nerv, эээ, и вы утверждаете что у меня извороты? Чем вам Dir не угодил? Похоже, изначально не правильно понял вас. В данном случае, мне караз таки было удобнее воспользоваться однострочным if, дабы не закрывать, а перенос для наглядности. Кстати, проверки названий файлов на самого себя у вас нет.Vitalts
Сообщение отредактировал Vitalts - Пятница, 15.03.2013, 12:17
Vitalts, в вашем варианте не хочет открывать файл (error) nerv, Саш, в вашем варианте жалуется на Mask и что он должен делать мне не понятно. У меня задача - открыть файл. За помощь спасибо.
зы. кстати, везде, где возможно, я тоже предпочитаю однострочный If.
Vitalts, в вашем варианте не хочет открывать файл (error) nerv, Саш, в вашем варианте жалуется на Mask и что он должен делать мне не понятно. У меня задача - открыть файл. За помощь спасибо.
зы. кстати, везде, где возможно, я тоже предпочитаю однострочный If.Michael_S
Michael_S, что значит не хочет? Без кода я не могу сказать где у вас ошибка, ибо код замечательно работает. Ни один год пользуюсь подобными методами. Попробуйте вывести название файла, который пытаетесь открыть, возможно, лимит исчерпан, и идет попытка открыть файл с пустым названием. Не совершенство кода, написанного на скорую руку :( Судя по скрину, так и есть. Приведите код
Michael_S, что значит не хочет? Без кода я не могу сказать где у вас ошибка, ибо код замечательно работает. Ни один год пользуюсь подобными методами. Попробуйте вывести название файла, который пытаетесь открыть, возможно, лимит исчерпан, и идет попытка открыть файл с пустым названием. Не совершенство кода, написанного на скорую руку :( Судя по скрину, так и есть. Приведите кодVitalts
Сообщение отредактировал Vitalts - Пятница, 15.03.2013, 13:08
кстати, везде, где возможно, я тоже предпочитаю однострочный If
просто вы не писали МНОГО кода Когда перед тобой 1000+ строк в одном только модуле, нет желания разбирать и додумывать. Хочется просто читать. Максимально быстро читать понятный не двусмысленный код. "С недавних пор" однострочный If я не использую вообще )
Цитата (Michael_S)
жалуется на Mask
Это та самая ошибка, о кот. я говорил. Замените Mask на Filter.
Цитата (Vitalts)
В данном случае, мне караз таки было удобнее воспользоваться однострочным if, дабы не закрывать, а перенос для наглядности.
для наглядности многострочный If. В вашем случае это неочевидность.
Цитата (Vitalts)
Кстати, проверки названий файлов на самого себя у вас нет.
функция, представленная мной возвращает список файлов заданной папки. Понятия "самого себя" здесь нет, т.к. функции все равно, откуда она вызывается. Думаю, несложно удалить из коллекции лишний Item.
Цитата (Michael_S)
кстати, везде, где возможно, я тоже предпочитаю однострочный If
просто вы не писали МНОГО кода Когда перед тобой 1000+ строк в одном только модуле, нет желания разбирать и додумывать. Хочется просто читать. Максимально быстро читать понятный не двусмысленный код. "С недавних пор" однострочный If я не использую вообще )
Цитата (Michael_S)
жалуется на Mask
Это та самая ошибка, о кот. я говорил. Замените Mask на Filter.
Цитата (Vitalts)
В данном случае, мне караз таки было удобнее воспользоваться однострочным if, дабы не закрывать, а перенос для наглядности.
для наглядности многострочный If. В вашем случае это неочевидность.
Цитата (Vitalts)
Кстати, проверки названий файлов на самого себя у вас нет.
функция, представленная мной возвращает список файлов заданной папки. Понятия "самого себя" здесь нет, т.к. функции все равно, откуда она вызывается. Думаю, несложно удалить из коллекции лишний Item.nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Саша, ты из пушки по воробьям стреляешь. Миша пишет:
Цитата (Michael_S)
Все, что об этом файле известно - он находится в той же папке, где и основной, и других файлов в этой папке нет.
Т.е. первый же файл с несовпадающим именем - нужный. Вариант Vitalts гораздо лучше подходит для этого случая и не привлекает внешних библиотек. Я уж не говорю о размере кода.
Саша, ты из пушки по воробьям стреляешь. Миша пишет:
Цитата (Michael_S)
Все, что об этом файле известно - он находится в той же папке, где и основной, и других файлов в этой папке нет.
Т.е. первый же файл с несовпадающим именем - нужный. Вариант Vitalts гораздо лучше подходит для этого случая и не привлекает внешних библиотек. Я уж не говорю о размере кода.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Я ни в кого не стреляю, я животных люблю Я привел написанный мной ранее код (под свои нужды)
Цитата (KuklP)
Т.е. первый же файл с несовпадающим именем - нужный
повторюсь: моя функция абстрагируется от (свой, чужой и т.п.). Она просто возвращает список файлов папки. При желании может делать это рекурсивно. Функцию можно подключить и не вносить существенных изменений в основную программу (добавляется одна строка вызова функции).
Цитата (KuklP)
Я уж не говорю о размере кода.
Качество кода не измеряется его размером. Вообще, не понимаю, почему форумчан беспокоит размер (не только этого) кода, если код написан должным образом? Подключили, забыли. Если хотите по прежнему заниматься ручной обсфукацией, экономить на каждой букве, пожалуйста.
Я пишу универсальные функции, кот. таскаю (использую) из проекта в проект. Мне это не мешает ) Если вам нравиться каждый раз переписывать весь код, я не против
Цитата (KuklP)
Саша, ты из пушки по воробьям стреляешь.
Я ни в кого не стреляю, я животных люблю Я привел написанный мной ранее код (под свои нужды)
Цитата (KuklP)
Т.е. первый же файл с несовпадающим именем - нужный
повторюсь: моя функция абстрагируется от (свой, чужой и т.п.). Она просто возвращает список файлов папки. При желании может делать это рекурсивно. Функцию можно подключить и не вносить существенных изменений в основную программу (добавляется одна строка вызова функции).
Цитата (KuklP)
Я уж не говорю о размере кода.
Качество кода не измеряется его размером. Вообще, не понимаю, почему форумчан беспокоит размер (не только этого) кода, если код написан должным образом? Подключили, забыли. Если хотите по прежнему заниматься ручной обсфукацией, экономить на каждой букве, пожалуйста.
Я пишу универсальные функции, кот. таскаю (использую) из проекта в проект. Мне это не мешает ) Если вам нравиться каждый раз переписывать весь код, я не против nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук
Качество кода не измеряется его размером. Не понимаю, почему форумчан беспокоит размер кода
Точно так же как и формул. Кстати и скорость тоже от длинны не всегда зависит Однако ты прав, форумчан это очень беспокоит Мы все тут хотим размер покороче и даже соревнуемся в этом постоянно в специально созданном для этого разделе
Цитата (nerv)
Качество кода не измеряется его размером. Не понимаю, почему форумчан беспокоит размер кода
Точно так же как и формул. Кстати и скорость тоже от длинны не всегда зависит Однако ты прав, форумчан это очень беспокоит Мы все тут хотим размер покороче и даже соревнуемся в этом постоянно в специально созданном для этого разделе Serge_007
Еще как измеряется. Можно написать на 10 страниц "правильного" кода, а можно то же действие описать одной строкой. Что легче можно будет понять и отредактировать? Ведро картошки можно отвезти на мопеде, не нужен для этого БелАз. Но если тебе так нравитЬся, я тоже не против
Цитата (nerv)
Качество кода не измеряется его размером.
Еще как измеряется. Можно написать на 10 страниц "правильного" кода, а можно то же действие описать одной строкой. Что легче можно будет понять и отредактировать? Ведро картошки можно отвезти на мопеде, не нужен для этого БелАз. Но если тебе так нравитЬся, я тоже не против KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Сообщение отредактировал KuklP - Пятница, 15.03.2013, 16:25
Можно написать на 10 страниц "правильного" кода, а можно то же действие описать одной строкой.
опиши одной строкой алгоритм сортировки (без выгрузки на лист)
Цитата (KuklP)
Что легче можно будет понять и отредактировать?
подозреваю, что эту длинную строку будет сложнее понять и отредактировать, чем много правильных/правильно_отформатированных строк
Цитата (KuklP)
Ведро картошки можно отвезти на мопеде, не нужен для этого БелАз
его можно донести в руках, если на то пошло. Речь не об этом. Как только Михаилу потребуется изменить что-то в коде, ему придется ковырять всю логику, в т.ч. логику получения имени файла из папки. В моем случае это не требуется, т.к. вынесено в функцию. Если ему потребуется проверять вложенные каталоги, ему придется писать новый алгоритм (перебирать всю логику, вносить изменения, отлаживать и т.п. всю программу, а не отдельную функцию).
Если вы предпочитаете закладывать фундамент дома из спичек, я не против, но сам стараюсь этого не делать
Цитата (Serge_007)
Кстати и скорость тоже от длинны не всегда зависит
зависит от алгоритма, а не от кол-ва букв )
Цитата (Serge_007)
Мы все тут хотим размер покороче и даже соревнуемся в этом постоянно в специально созданном для этого разделе
за рекламу 5
Цитата (KuklP)
Еще как измеряется
чуть меньше неверно, чем полностью
Цитата (KuklP)
Можно написать на 10 страниц "правильного" кода, а можно то же действие описать одной строкой.
опиши одной строкой алгоритм сортировки (без выгрузки на лист)
Цитата (KuklP)
Что легче можно будет понять и отредактировать?
подозреваю, что эту длинную строку будет сложнее понять и отредактировать, чем много правильных/правильно_отформатированных строк
Цитата (KuklP)
Ведро картошки можно отвезти на мопеде, не нужен для этого БелАз
его можно донести в руках, если на то пошло. Речь не об этом. Как только Михаилу потребуется изменить что-то в коде, ему придется ковырять всю логику, в т.ч. логику получения имени файла из папки. В моем случае это не требуется, т.к. вынесено в функцию. Если ему потребуется проверять вложенные каталоги, ему придется писать новый алгоритм (перебирать всю логику, вносить изменения, отлаживать и т.п. всю программу, а не отдельную функцию).
Если вы предпочитаете закладывать фундамент дома из спичек, я не против, но сам стараюсь этого не делать
Цитата (Serge_007)
Кстати и скорость тоже от длинны не всегда зависит
зависит от алгоритма, а не от кол-ва букв )
Цитата (Serge_007)
Мы все тут хотим размер покороче и даже соревнуемся в этом постоянно в специально созданном для этого разделе
Саш, ты посмотри на себя со стороны. Ты упорно пытаешься доказать всем участникам темы, что твой громоздкий, глючный в таком виде код лучше, чем пятистрочный код Vitalts.
Цитата (nerv)
Правильность она "одна на всех мы за ценой не постоим", только это не все понимают )
Я понимаю, если бы ты девушке, далекой от Экса, это доказывал. Или ты всех нас дураками считаешь?
Цитата (nerv)
для каких случаев мои доводы не верны?
- и правда думаешь, что кому-то интересно искать все твои сообщения выискивая в них "перлы" а ля nerv? Хочешь быть нарциссом - ради Бога. Растеряешь друзей.
Саш, ты посмотри на себя со стороны. Ты упорно пытаешься доказать всем участникам темы, что твой громоздкий, глючный в таком виде код лучше, чем пятистрочный код Vitalts.
Цитата (nerv)
Правильность она "одна на всех мы за ценой не постоим", только это не все понимают )
Я понимаю, если бы ты девушке, далекой от Экса, это доказывал. Или ты всех нас дураками считаешь?
Цитата (nerv)
для каких случаев мои доводы не верны?
- и правда думаешь, что кому-то интересно искать все твои сообщения выискивая в них "перлы" а ля nerv? Хочешь быть нарциссом - ради Бога. Растеряешь друзей.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
об единственной опечатке я предупредил сразу. Это раз. Два, кто-то не знает, что от него хочет компилятор при [vba]
Код
Option Expicit
[/vba] я тут не при чем )
Цитата (KuklP)
Ты упорно пытаешься доказать всем участникам темы
я отстаиваю свою точку зрения
Цитата (KuklP)
и правда думаешь, что кому-то интересно искать все твои сообщения выискивая в них "перлы" а ля nerv?
если мне говорят, что я не прав, я спрашиваю в чем, а не заведомо соглашаюсь
Цитата (KuklP)
Растеряешь друзей.
т.е. если наши мнения не совпадают, то я уже автоматически не друг, потому, что "мнения друзей должны совпадать всегда"? (это следует из твоих слов)
Цитата (RAN)
но вся проблема в том - что она одна, но для всех разная!
Не поверишь, есть нюансы, но в целом правильность одинаковая Я общаюсь не только (и уже не столько) на форумах по эксель, и почему то везде (кроме известных мне форумов по эксель) правильность одна. Я никому не навязывал, даже не обсуждал этот вопрос (с совершенно посторонними людьми), но исходя из их сообщений, очевидно, что правильность одна. Это видно по коду, по его стилю. Т.е. все хорошие прогеры видя код говорят, "что такое хорошо, а что такое плохо". Почему надо делать так, а не иначе.
Цитата (KuklP)
Хочешь быть нарциссом - ради Бога
Хоть Жераром Депардье или психом в белой рубашке с пеной у рта (в ваших глазах). Моя точка зрения останется при мне
Цитата (RAN)
Ты откатись чуть назад, и взгляни на свои коды. И переменные из одной буквы, и Iif сплошь и рядом, и еще куча всего, что ты сейчас критикуешь!
в том то и дело. Я сам делал так (писал ужасный, говеный код) и не хочу, чтобы кто-нибудь еще наступал на эти грабли. Это ж очевидно )
Цитата (KuklP)
что твой громоздкий, глючный
об единственной опечатке я предупредил сразу. Это раз. Два, кто-то не знает, что от него хочет компилятор при [vba]
Код
Option Expicit
[/vba] я тут не при чем )
Цитата (KuklP)
Ты упорно пытаешься доказать всем участникам темы
я отстаиваю свою точку зрения
Цитата (KuklP)
и правда думаешь, что кому-то интересно искать все твои сообщения выискивая в них "перлы" а ля nerv?
если мне говорят, что я не прав, я спрашиваю в чем, а не заведомо соглашаюсь
Цитата (KuklP)
Растеряешь друзей.
т.е. если наши мнения не совпадают, то я уже автоматически не друг, потому, что "мнения друзей должны совпадать всегда"? (это следует из твоих слов)
Цитата (RAN)
но вся проблема в том - что она одна, но для всех разная!
Не поверишь, есть нюансы, но в целом правильность одинаковая Я общаюсь не только (и уже не столько) на форумах по эксель, и почему то везде (кроме известных мне форумов по эксель) правильность одна. Я никому не навязывал, даже не обсуждал этот вопрос (с совершенно посторонними людьми), но исходя из их сообщений, очевидно, что правильность одна. Это видно по коду, по его стилю. Т.е. все хорошие прогеры видя код говорят, "что такое хорошо, а что такое плохо". Почему надо делать так, а не иначе.
Цитата (KuklP)
Хочешь быть нарциссом - ради Бога
Хоть Жераром Депардье или психом в белой рубашке с пеной у рта (в ваших глазах). Моя точка зрения останется при мне
Цитата (RAN)
Ты откатись чуть назад, и взгляни на свои коды. И переменные из одной буквы, и Iif сплошь и рядом, и еще куча всего, что ты сейчас критикуешь!
в том то и дело. Я сам делал так (писал ужасный, говеный код) и не хочу, чтобы кто-нибудь еще наступал на эти грабли. Это ж очевидно )nerv
Чебурашка стал символом олимпийских игр. А чего достиг ты? Тишина - самый громкий звук