BHenry85 发表于 2022-7-29 07:49:58

删除列表中的重复项

我在下面找到了一个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]
查看完整版本: 删除列表中的重复项