我在下面找到了一个lisp,并对其进行了一些修改,这将允许我提取block的所有值,然后将它们写入csv文件。但是,在不破坏代码的情况下删除重复项时,我遇到了一个问题。我得到了我在其他帖子中看到的想法的概念,但我找到的代码完成了我需要的大部分工作,它编译了所有标记及其值,并将它们写入列表,我对如何删除重复项以及收集这些值的方式感到困惑。我附上了一个文件,其中我故意复制标签,以测试删除重复。我很抱歉事先没有口齿不清,但有人能帮我指点怎么做吗?
如何处理单个项目并从我收集的内容中删除重复项的示例。
- (if (member item data)
- data
- (cons item data))
我找到的代码带有指向原始页面的链接,但进行了修改以满足我的需要。
- ; Global ATTribute EXtractor
- ; by Miklos Fuccaro mfuccaro@hotmail.com
- ; https://www.cadtutor.net/forum/topic/68808-export-enhanced-attributes-editor-values-to-excel/
- ;-------------------------November 2004 -------
- ;;Edited March 2006 by C. Bassler to allow specification of block and tage names to extract
- (defun DBEXT ()
-
- ; define block and attributes
- (setq Blocklist '("DetailBubble"))
- (setq TagList '("DETAIL_NUMBER" "SHEET_NUMBER" ))
-
- ; create block names separated by columns, for selection filter
- (setq Blocknames (List2String BlockList))
- (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 BlockNames))))
- (if (not ss)
- (quit))
-
- (setq Root (getvar "DWGPREFIX"))
- (setq file (open (strcat Root "_Details.csv") "w")
- i -1)
- (repeat (sslength ss)
- (setq TagRow nil
- ValRow nil)
- (setq Edata (entget (setq e (ssname ss (setq i (1+ i))))))
- (while (/= (Dxf 0 Edata) "SEQEND")
- (if
- (and
- (= (Dxf 0 Edata) "ATTRIB")
- (member (dxf 2 Edata) TagList)
- ;;if tag is on list
- ) ;and
- (progn
- (setq TagRow (cons (Dxf 2 Edata) TagRow))
- (setq valRow (cons (Dxf 1 Edata) ValRow))
- ) ;progn
- )
- (setq Edata (entget (setq e (entnext e))))
- ) ;while
- (write-line (List2String (reverse ValRow)) file)
- ) ;repeat
- (close file)
- (princ (strcat "\nDone writing file " Root "_Details.csv"))
- (princ)
- ) ;defun
- (defun List2String (Alist)
- (setq NumStr (length Alist))
- (foreach Item AList
- (if (= Item (car AList))
- ;;first item
- (setq LongString (car AList)) ; write tag
- (setq LongString (strcat LongString "-" Item)) ; write value
- )
- )
- LongString
- ) ;defun
- (defun Dxf (code pairs)
- (cdr (assoc code pairs))
- )
- (princ)
- (DBEXT)
|