cindy_fisher 发表于 2012-5-28 17:18:27

请教块属性提取中的循环问题

本帖最后由 cindy_fisher 于 2012-5-28 17:20 编辑

图中有一些属性块,这些属性块有个共同的属性标记是line_no,我想做的就是把每个属性块中的line_no标签的属性提取出来,这些属性的块首先是块名字不一样,其次是有的块entnext一次就可以得到,有的需要entnext好几次才能得到想要的属性,尝试编写了如下程序,发现死循环了,中间改了几次都在循环的地方出错,实在没招了,发上来求达人支招,谢谢。
(defun C:fun ()

(command "osmode" "0")
(command "zoom" "all")
(setqffn (getfiled "Export the specify texts"
          "D:/perfiles/LISP/homecom/"
          "txt"
          1
      )
)
(setq ff (open ffn "a"))

(setq ss_b (ssget "x" '((0 . "insert") (66 . 1))))
(setq a 0)
(repeat (sslength ss_b)
    (setq en_b (entnext (ssname ss_b a)))
    (setq ctrl t)
    (if(= (cdr (assoc 0 (entget en_b))) "attrib")
      (progn
(while ctrl
    (setq tag (cdr (assoc 2 (entget en_b))))
    (if (= (substr tag 1 4) "LINE")
      (progn
      (setq btxt (cdr (assoc 1 (entget en_b))))
      (setq ctrl nil)
      (setq p1 '(31.5 1.0 0))
      (setq p2 '(33.1250 0.5625 0))
      (setq ss_dn (ssget "w" p1 p2 '((0 . "text,mtext"))))
      (setq dn (cdr (assoc 1 (entget (ssname ss_dn 0)))))
;;;结束取得文件名
      (write-line (strcat dn "[[" btxt) ff)
      )
      (setq en_b (entnext en_b))
    )
)
(setq ctrl t)
      )
    )
    (setq a (+ 1 a))
)
(close ff)
(princ)
)


Gu_xl 发表于 2012-5-28 23:08:04

循环结束条件是:
(= (cdr (assoc 0 (entget en_b)))"SEQEND")

smartstar 发表于 2012-6-1 18:54:57

学习学习……

gao051525 发表于 2012-6-3 19:16:03

不错不错,拜读了,顶!
页: [1]
查看完整版本: 请教块属性提取中的循环问题