再次感谢fuccaro的真知灼见 大家好。这是我在这个论坛上的第一篇帖子。我必须说,这是一个很棒的论坛。
我经历了提取wizzard的过程,我发现它确实有问题。它实际上以随机方式从批处理过程中删除文件。我需要从一个名为“I”的块中提取信息,其中包含标题块的一些信息;作为E.C.N.编号,
图纸编号、修订级别、修订类别、变更说明
和主管工程师。从几个图形(*.dwg文件)到
能够在excel文档中包含我提到的信息
列标题。我看到这个论坛线程上显示的Lisp程序确实有效地提取了属性。但它从图形中的所有块中获取信息。引用fuccaro:
“最简单的方法是添加块名列表,并教会例程忽略列表中未包含的所有块。或者忽略这些块并处理其他块。”
因为我不知道自动LISP;我怎样才能让日常工作做到这一点?
换句话说,在例程中,我可以告诉它在每个图形中查找哪个块?
我如何告诉它在每个块中查找哪些信息,以便根据需要为不同的信息集复制例程?
如何使信息按行到列和列到行的方式显示?
抱歉,如果这太长了。谢谢你抽出时间。 好的,我来回答你的一个问题。。。。
要使例行程序只处理您选择的块,而不是所有块,请从以下位置更改一行:
(setq ss(ssget“X”'((0。“INSERT”)(66.1)))
到
(setq ss(ssget’((0。“插入”)(66.1))) 谢谢你的回复。我做了替换,但它仍然需要所有的块。在例程中,我可以在哪里键入块列表或从中提取信息的唯一块?
我对lisp编程不感兴趣。
谢谢你抽出时间。 看看沼泽地的这条线
http://www.theswamp.org/forum/index.php?topic=8661.0
关于提取属性 我在另一个论坛上回复了iosa1,但认为它也应该放在这里,因为它建立在这个线程和Fuccaro的例程上。编辑第二行和第三行,以指定要提取的块名和标记名。列表中文本的大小写需要匹配块名和标记名。
; Global ATTribute EXtractor
; by Miklos Fuccaro mfuccaro@hotmail.com
;-------------------------November 2004 -------
;;Edited March 2006 by C. Bassler to allow specification of block and tage names to extract
(defun gattex()
(setq Blocklist '("Name1" "Name2" "Name3"));; ** edit to include block names to select
(setq TagList '("Tag1" "TAG2" "Tag3"));; ** edit to include tag names to extract
;;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 "attributes.CSV") "a") i -1)
(write-line (strcat Root (getvar "DWGNAME")
" -found " (itoa (sslength ss))
" block(s) with attributes") file)
(repeat (sslength ss)
(setq TagRow nil ValRow nil)
(setq Edata (entget (setq e (ssname ss (setq i (1+ i))))))
(write-line "" file)
(write-line (strcat "block name:" "," (Dxf 2 Edata)) file)
(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 TagRow)) file)
(write-line (List2String (reverse ValRow)) file)
);repeat
(close file)
(princ (strcat "\nDone writing file " Root "attributes.csv"))
(princ)
);defun
;;-------------------------------
(defun List2String (Alist)
(setq NumStr (length Alist))
(foreach Item AList
(if (= Item (car AList));;first item
(setq LongString (car AList))
(setq LongString (strcat LongString "," Item))
)
)
LongString
);defun
;;--------------------------------
(defun Dxf (code pairs)
(cdr (assoc code pairs))
)
(gattex) 这里有一些VBA来做类似的事情。只需删除包含不需要的信息的行。
Dave 我用这个,我觉得很酷。。。
有可能重拍吗?
我希望它
1.覆盖现有cvs文件(因为现在它在先前创建的cvs文件下面添加了行)
这适用于lisp代码
谢谢你的帮助!! 可能
4 酷!
Thanx人
你做了什么?
页:
1
[2]