Тема: Как реализовать обработку нескольких файлов в каталоге ?
Суть задачи примерно такова: есть макрос (processing)
этот макрос надо выполнить по всем файлам *.dwg лежаших в одной папке "D:\Files\" ???? подскажите плиз как это реализовать ???
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → LISP → Как реализовать обработку нескольких файлов в каталоге ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Суть задачи примерно такова: есть макрос (processing)
этот макрос надо выполнить по всем файлам *.dwg лежаших в одной папке "D:\Files\" ???? подскажите плиз как это реализовать ???
Посмотрите здесь
https://www.caduser.ru/forum/topic16040.html
и здесь
https://www.caduser.ru/forum/topic19699.html
Как собрать список файлов внутри папки и подпапок разобрался, а как пройтись по этим файлам и применить к ним макрос (processing)???
ВОСПОЛЬЗУЙСЯ ПОИСКОМ,
РАНЬНЕ ЭТОТ ВОПРОС НЕ РАЗ ОБСУЖД.
;| Основной код взят с CADALYST 03/05 Tip2023: PurgeFiles.lsp Directory Clean Up (c) Andrzej Gumula [c]2004 Andrzej Gumula, Katowice, Poland e-mail: a.gumula@wp.pl|; (vl-load-com) ;;;Ф-ция работы с обрабатываемым файлом ;;;curDOC - Vla указатель на обрабатываемый документ ;;; типа (vla-get-activedocument (vlax-get-acad-object)) (defun dofile ( curDOC) ;;;Для примера ;;;Печать имени файла (princ "\nИмя файла:") (princ (vlax-variant-value (vla-GetVariable curDOC "DWGNAME"))) ;;; Очистка (vla-purgeall curDOC) ) (defun c:DoFile (/ FilesList SubDir Files File) (defun GetFolder (/ Dir Item Path) (cond ((setq Dir (vlax-invoke (vlax-get-or-create-object "Shell.Application") 'browseforfolder 0 "Select folder with DWG files:" 1 "")) (cond ((not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list Dir 'Items)))) (setq Item (vlax-invoke-method (vlax-invoke-method Dir 'Items) 'Item)) (setq Path (vla-get-path Item)) (if (not (member (substr Path (strlen Path) 1) (list "/" "\\"))) (setq Path (strcat Path "\\"))))))) Path) (defun vl-findfile (Location / DirList Path AllPath) (MakeDirList Location) (setq DirList (cons Location DirList)) (foreach Elem DirList (if (setq Path (vl-directory-files Elem "*.dwg")) (foreach Item Path (setq AllPath (cons (strcat Elem "/" Item) AllPath))))) (reverse AllPath)) (defun MakeDirList (Arg / TmpList) (setq TmpList (cddr (vl-directory-files Arg nil -1))) (cond (TmpList (setq DirList (append DirList (mapcar '(lambda (z) (strcat Arg "/" z)) TmpList))) (foreach Item TmpList (MakeDirList (strcat Arg "/" Item)))))) (setq *ERR-LIST* nil) (if (not FileSystemObject) (setq FileSystemObject (vla-getInterfaceObject (vlax-get-acad-object) "Scripting.FileSystemObject"))) (cond ((= (getvar "SDI") 0) (cond ((setq DwgPath (GetFolder)) (initget 1 "Yes No") (setq Subdir (cond ((getkword "\nОбрабатывать поддиректории? [Yes/No]: ")) (T "Yes"))) (if (equal SubDir "Yes") (setq Files (vl-findfile (substr DwgPath 1 (1- (strlen DwgPath))))) (setq Files (mapcar '(lambda (x) (strcat dwgpath x)) (vl-directory-files DwgPath "*.dwg" 1)))) (setq Files (mapcar 'strcase Files)) (cond (Files (vlax-for & (vla-get-documents (vlax-get-acad-object)) (setq FilesList (cons (strcase (vla-get-fullname &)) FilesList))) (foreach & Files (cond ((not (member & FilesList)) (cond ((/= (logand (vlax-get-property (vlax-invoke-method FileSystemObject 'getfile & ) 'Attributes ) 1 ) 1 ) (cond ((setq File (vla-open (vla-get-documents (vlax-get-acad-object)) &)) (prompt (strcat "\nОбработка файла" & ". Подождите...")) ;;; Вызываем ф-цию работы с файлом FILE - Vla указатель на документ (dofile FILE) (prompt (strcat "\nSave and close " &)) (vla-save File) (vla-close File) (vlax-release-object File)) (T (prompt (strcat "\nCannot open " & "\nDrawing file was created by an incompatible version. "))))) (T (prompt (strcat & " is read-only. Purge canceled. "))))) (T (prompt (strcat & " is open now. Purge canceled. ")))))) (T (prompt "\nNothing files found to purge. ")))) (T (prompt "\nNothing selected. ")))) (T (prompt "\nThe routine is not available in SDI mode. "))) (princ)) (prompt "\n=== Команда загружена. Наберите Dofile ===")(princ)
В ф-ции dofile задавай необходимую обработку файла. Использовать ActiveX, не command!!!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → LISP → Как реализовать обработку нескольких файлов в каталоге ?
Форум работает на PunBB, при поддержке Informer Technologies, Inc