Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: получение списка файлов по маске с необязательной проверкой вложенных

DwgRuLispLib: получение списка файлов по маске с необязательной проверкой вложенных

Ответ
Поиск в этой теме
Непрочитано 14.01.2008, 10:46
DwgRuLispLib: получение списка файлов по маске с необязательной проверкой вложенных
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,787

Важно! Проход по вложенным каталогам опционален, поэтому скорость работы кода не очень велика.
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-browsefiles-in-directory
;;; *
;;; * 06/12/007 Версия 01.001.14.
;;; * 
;;; ************************************************************************
;;; исходник: http://www.caduser.ru/cgi-bin/f1/board.cgi?t=19612AN

(defun dwgru-browsefiles-in-directory (directory pattern nested /)
;;;    Переименована из z-files-in-directory
;;;    функция возвращает список файлов по маске находящаяся в заданной
;;; директории
;;;    Автор : Зуенко Виталий (ZZZ)
;;;  Параметры:
;;;    directory  путь к папке например "D:\\Мои документы\\ZEF\\Lisp"
;;;    pattern    шаблон например "*.lsp" или список '("*.dwg" "*.dxf")
;;;    nested    искать в вложенных папках: t (да) или nil (нет)
;;; Пример вызова:
  ;|
(dwgru-browsefiles-in-directory "D:\\Мои документы\\ZEF\\Lisp" "*.lsp" t)
(dwgru-browsefiles-in-directory "D:\\Мои документы\\ZEF\\Lisp" '("*.lsp" "*.fas") t)
|;
  (if (not (listp pattern))
    (setq pattern (list pattern))
    ) ;_ if
  (if nested
    (apply
      'append
      (append
        (mapcar '(lambda (_pattern)
                   (mapcar '(lambda (f) (strcat directory "\\" f))
                           (vl-directory-files directory _pattern 1)
                           ) ;_ list
                   ) ;_ lambda
                pattern
                ) ;_ mapcar
        (mapcar
          '(lambda (d)
             (dwgru-browsefiles-in-directory
               (strcat directory "\\" d)
               pattern
               nested
               ) ;_ end of loc:files-in-directory
             ) ;_ lambda
          (vl-remove
            "."
            (vl-remove ".."
                       (vl-directory-files directory nil -1)
                       ) ;_ end of vl-remove
            ) ;_ vl-remove
          ) ;_ mapcar
        ) ;_ append
      ) ;_ append
    (apply
      'append
      (mapcar '(lambda (_pattern)
                 (mapcar '(lambda (f) (strcat directory "\\" f))
                         (vl-directory-files directory _pattern 1)
                         ) ;_ list
                 ) ;_ lambda
              pattern
              ) ;_ end of mapcar
      ) ;_ end of apply
    ) ;_ end of if
  ) ;_ end of defun

Вложения
Тип файла: lsp dwgru-browsefiles-in-directory.LSP (2.3 Кб, 406 просмотров)

__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 14.01.2008 в 10:58.
Просмотров: 33560
 
Непрочитано 19.03.2010, 12:13
#21
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Кулик Алексей aka kpblc
у меня dwgru-browsefiles-in-directory.lsp и at-load-lsp в StartupSuite (Startgruppe-по немецки) прописаны, но при загрузке нового файла, команды не исполняются автоматически, нужно запускать вручную. А хотелось бы, чтобы все выполнялось автоматом.
alex8888 вне форума  
 
Автор темы   Непрочитано 19.03.2010, 13:14
#22
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Ну так добавить самовызов функции:
Код:
[Выделить все]
(defun at-load-lsp( / err)
	(foreach file (dwgru-browsefiles-in-directory "D:\\LISP" '("*.lsp" "*.Vlx" "*.fas") t)
		(if (vl-catch-all-error-p
				(setq err (vl-catch-all-apply '(lambda() (load file)))))
			(princ (strcat "\nError loading file " file " : " (vl-catch-all-error-message err))))
		)
	)

(at-load-lsp)
И все...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.03.2010, 14:04
#23
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Цитата:
Ну так добавить самовызов функции
И тогда кад зациклился и сдох

По пути загрузки Лиспов был и мой загрузочный at-load-lsp, который и стал сам себя запускать, а вместе с тем скушал всю доступную память компа.
alex8888 вне форума  
 
Автор темы   Непрочитано 19.03.2010, 15:46
#24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Странно. У меня подобного не встречалось... ПРавда, у меня и имена функций уникальны.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.03.2010, 15:53
#25
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Да нет, все правильно, я исправил. Как и указал - мой файл стал грузиться в цикле и сам себя запускать, когда перенес его в другое место, не в пути поиска, то все образумилось. Сам виноват, сперва надо подумать было.
Спасибо за помощь.
alex8888 вне форума  
 
Непрочитано 21.03.2010, 23:23
#26
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 208


Кулик Алексей aka kpblc
1. В чем принципиальное отличие этого кода от указанного в http://forum.dwg.ru/showthread.php?t=16562 , чем там предпочтительнее?
2. Функция загрузки из http://forum.dwg.ru/showthread.php?t=15683 намнОго лучше, чем та, которой я просто загружаю Лиспы при запуске? Имеет смысл мне в моем конкретном случае ее использовать или совсем не обязательно? Что посоветуешь?
Спасибо.
alex8888 вне форума  
 
Автор темы   Непрочитано 22.03.2010, 00:20
1 | #27
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


1. Фактически отличия минимальны. Просто иногда необходима гибкость (учитывать или нет вложенные каталоги), иногда она излишня. Для моей практики обычно требуется с проверкой вложений, но я, например, четко понимаю, что я не имею никакого права диктовать "делай так и только так".
2. Указанный код от VVA можно рассматривать как готовый вариант применения, мне кажется. У меня своя реализация, у тебя - своя. Что-либо тут советовать тяжело.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.04.2012, 20:52
#28
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Возник вопрос. Как функции dwgru-browsefiles-in-directory скормить переменную DWGPREFIX? Ведь DWGPREFIX возвращает путь с одинарным слэшем. Посмотрел эту тему, нашел библиотечную функцию dwgru-string-replace, но слэши она воспринимает как переход на новую строку.
Добавлено:
Разобрался! Надо так
Код:
[Выделить все]
(dwgru-browsefiles-in-directory (getvar "dwgprefix")  "*.jpg" nil)

Последний раз редактировалось skkkk, 25.04.2012 в 21:21.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: получение списка файлов по маске с необязательной проверкой вложенных

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DwgRuLispLib: Функция открытия диалога Open\Save As файла (файлов) Supermax Библиотека функций 20 14.03.2018 10:05
DwgRuLispLib: Команда. Загрузка lisp файлов из указанной папки VVA Библиотека функций 7 15.02.2018 10:10
Исключение элементов одного списка из другого по маске Кулик Алексей aka kpblc Программирование 3 18.09.2006 17:31