Было бы лучше использовать регулярные выражения или простой FileExists для поиска файлов? - PullRequest
1 голос
/ 23 ноября 2010

Мне нужно проверить, существует ли файл в каталоге.Два варианта, о которых я подумал, - использовать регулярное выражение (vbscript.regexp) для определения наличия файла.Другой вариант заключается в использовании метода FileSystemObject FileExists.

Недостатки использования регулярного выражения подразумевают, что мне нужно будет просмотреть все файлы в каталоге и проверить регулярное выражение для каждого имени файла.Во-вторых, подход регулярных выражений может быть сложнее поддерживать (регулярное выражение) в будущем.Тем не менее, мне нужно протестировать два регулярных выражения, так как могут быть разные версии одного и того же файла.Для одного из файлов есть часть описания имени файла, которая часто меняется (хорошо, это ложь - она ​​меняется на некотором случайном цикле), поэтому использование регулярного выражения поможет сопоставить файлы независимо от этой части = более надежный код.

Используя FileExists, я могу проверить оба файла одновременно, и в зависимости от логического значения, возвращаемого для каждой проверки, обработка может продолжаться.Недостатком использования FileExists является то, что сопоставление с подстановочными знаками не поддерживается, поэтому при рассмотрении имени файла с описанием его всегда нужно обновлять, чтобы отразить новое описание = больше проблем с обслуживанием.Однако его легче понять и изменить.

Формат имен файлов:

Data_Sheet_<yyyymmdd>_D.xlsx // the normal file
Data_Sheet_<yyyymmdd>_D_<some description>.xlsx // the alternate file

Часть <yyyymmdd> имени файла будет определяться текущей папкой, в которой находится файлв.

Вопрос: было бы лучше использовать регулярные выражения или простые FileExists для поиска файлов?

Я буду использовать любой из вышеуказанных методов в рамкахExcel vba macro.

1 Ответ

2 голосов
/ 23 ноября 2010

Вы смотрели на Dir()?Вы можете передать его по шаблону, как my*file.pd? Возможно, это может быть способ пойти на компромисс.Конечно, вы не получите всю мощь регулярных выражений, но вы можете ограничить свои файлы, а затем на самом деле проверить, чтобы увидеть, что существует.

Лично я бы использовал FileExists() вместо того, чтобы циклически просматривать каталог и проверять каждыйфайл.Если каталог становится огромным, ваш цикл может длиться вечно.Хотя, если вы используете Dir(), вы можете потенциально ограничить количество файлов, которые вам нужно перебирать.Плюс FileExists() - это ровно одна строка / утверждение и чище ... хотя тогда вы должны убедиться, что среда выполнения сценариев включена в ваш проект

http://techonthenet.com/excel/formulas/dir.php http://www.blueclaw -db.com / listbox-directory.htm http://www.hobbub.com/vba-vb-vsto/iterating-over-a-directory-with-a-dir-loop-loop-through-directory-vb/

Вторые и третьи ссылки имеют лучшие примеры итерации по каталогу.

...