删除列表中的重复项
我在下面找到了一个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 ItemAList
(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)
页:
[1]