明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1852|回复: 8

[已解答] 谁有空修改下langjs大师的目录提取的程序!

[复制链接]
发表于 2014-10-26 13:31 | 显示全部楼层 |阅读模式
10明经币
    在论坛找到的langjs大师的目录提取的程序!感觉比较复杂,我自己的图框比较简单,想改成适合自己图框的程序,但是改了下发现不行,功力有限,麻烦大家帮帮忙!附上测试的文件和结果,还有langjs大师的程序!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

重写了个 在要输出的目录中创建一个新dwg文件,运行extract,提同目录下所有其它dwg文件中的目录信息到“目录.csv”文件中。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-10-26 13:31 | 显示全部楼层
本帖最后由 vectra 于 2014-10-26 19:51 编辑

重写了个
在要输出的目录中创建一个新dwg文件,运行extract,提同目录下所有其它dwg文件中的目录信息到“目录.csv”文件中。
  1. ;;;(defun extract-block-attribs (name / n obj rt ss tmp)
  2. ;;;  (if (setq ss (ssget "X" (list '(0 . "INSERT") (cons 2 name))))
  3. ;;;    (repeat (setq n (sslength ss))
  4. ;;;      (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
  5. ;;;
  6. ;;;      (foreach att (vlax-safearray->list
  7. ;;;                     (vlax-variant-value (vla-getattributes obj))
  8. ;;;                   )
  9. ;;;        (setq tmp (cons        (cons (vla-get-tagstring att)
  10. ;;;                              (vla-get-textstring att)
  11. ;;;                        )
  12. ;;;                        tmp
  13. ;;;                  )
  14. ;;;        )
  15. ;;;      )
  16. ;;;      (setq rt        (cons tmp rt)
  17. ;;;            tmp        nil
  18. ;;;      )
  19. ;;;    )
  20. ;;;  )
  21. ;;;  rt
  22. ;;;)
  23. ;; (extract-block-attribs "KX-目录属性块")


  24. (defun get-dwgfilenames        (/ e path)
  25.   (setq path (vl-filename-directory (getvar "DWGPREFIX")))
  26.   (mapcar '(lambda (e) (strcat path "\\" e))
  27.           (vl-directory-files path "*.dwg" 1)
  28.   )
  29. )
  30. ;;;


  31. (defun extract-block-attribs2 (doc name / rt tmp)
  32.   (vlax-for layout (vla-get-layouts doc)
  33.     (vlax-for block (vla-get-block layout)
  34.       (if (and
  35.             (= (vla-get-objectname block) "AcDbBlockReference")
  36.             (= (vla-get-name block) name)
  37.           )
  38.         (progn
  39.           (foreach att (vlax-safearray->list
  40.                          (vlax-variant-value (vla-getattributes block))
  41.                        )
  42.             (setq tmp (cons (cons (vla-get-tagstring att)
  43.                                   (vla-get-textstring att)
  44.                             )
  45.                             tmp
  46.                       )
  47.             )
  48.           )
  49.           (setq        rt  (cons tmp rt)
  50.                 tmp nil
  51.           )
  52.         )
  53.       )
  54.     )
  55.   )
  56.   rt
  57. )
  58. ;;(extract-block-attribs2 (vla-get-activedocument (vlax-get-acad-object)) *title-block-name*)


  59. (defun extract-file-attribs (filename / doc rt)
  60.   (if (/= (strcase filename)
  61.           (strcase
  62.             (strcat (getvar "DWGPREFIX") (getvar "DWGNAME"))
  63.           )
  64.       )
  65.     (progn
  66.       (setq doc        (vla-open (vla-get-documents (vlax-get-acad-object))
  67.                           filename
  68.                 )
  69.       )

  70.       (setq rt (vl-bb-ref '*extracted-attribs*)
  71.             rt (cons (cons (strcase filename t)
  72.                            (extract-block-attribs2 doc *title-block-name*)
  73.                      )
  74.                      rt
  75.                )
  76.       )
  77.       (vl-bb-set '*extracted-attribs* rt)

  78.       (vla-close doc)
  79.     )
  80.   )
  81. )
  82. ;; (extract-file-attribs (getfiled "打开文件" (getvar "dwgprefix") "dwg" 0))
  83. ;; 该函数不能在VLIDE中运行,会导致CAD崩溃


  84. (defun concrate        (lst)
  85.   (strcat (car lst)
  86.           (apply 'strcat
  87.                  (mapcar '(lambda (e) (strcat "," e)) (cdr lst))
  88.           )
  89.   )
  90. )
  91. ;; (concrate '("图号" "图名" "总页码"))
  92. ;; "图号,图名,总页码"


  93. (defun write-content (/ e file filename ml row mli)
  94.   (setq filename (strcat (getvar "dwgprefix") "目录.csv"))
  95.   (setq file (open filename "w"))

  96.   (write-line (concrate *extract-tag*) file)

  97.   (foreach ml (mapcar 'cdr (vl-bb-ref '*extracted-attribs*))
  98.     (foreach mli ml
  99.       (setq row        (mapcar        '(lambda (e) (cdr (assoc e mli)))
  100.                         *extract-tag*
  101.                 )
  102.       )
  103.       (write-line
  104.         (strcat        (car row)
  105.                 (apply 'strcat
  106.                        (mapcar '(lambda (e) (strcat "," e)) (cdr row))
  107.                 )
  108.         )
  109.         file
  110.       )
  111.     )
  112.   )

  113.   (close file)
  114.   (startapp "notepad" filename)
  115. )
  116. ;;

  117. (defun c:extract ()
  118.   (vl-bb-set '*extracted-attribs* nil)
  119.   (mapcar 'extract-file-attribs (get-dwgfilenames))

  120.   (write-content)

  121.   (princ)
  122. )
  123. ;;

  124. (setq *title-block-name* "KX-目录属性块"
  125.       *extract-tag*         '("图号" "图名" "总页码")
  126. )
回复

使用道具 举报

 楼主| 发表于 2014-10-26 19:27 | 显示全部楼层
该出手就出手!!!!!!!
回复

使用道具 举报

 楼主| 发表于 2014-10-26 21:22 | 显示全部楼层
vectra 发表于 2014-10-26 19:49
重写了个
在要输出的目录中创建一个新dwg文件,运行extract,提同目录下所有其它dwg文件中的目录信息到“目 ...

可以了!还有几个问题,如果有空的话可以帮我完善下!
1:如果还有其他属性块:比如 KX-pm;KX-zm这样的属性块,能不能也一起提取“图号”“图名”“总页码”到一个csv.
2:排序好像是大到小,能否变成从小到大,不过这问题不大,点下EXL排序也是一部!
3:能否实现langjs大师那样的,读取一个文件夹的文件,而不用新建一个dwg!

有空的话完善下第1点,第2,3不解决也没关系!谢谢
回复

使用道具 举报

发表于 2014-10-26 23:18 | 显示全部楼层
1~3已修改,现在可以从任意dwg文件中运行extract命令,然后选择要处理目录里的一个文件,则该目录里的所有文件均会处理。

要提取的块名称以及要输出的属性可以修改文件最后两个行那两个变量

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2014-10-27 08:19 | 显示全部楼层
本帖最后由 spp_wall 于 2014-10-27 08:34 编辑
vectra 发表于 2014-10-26 23:18
1~3已修改,现在可以从任意dwg文件中运行extract命令,然后选择要处理目录里的一个文件,则该目录里的所有 ...

还有一个比较大得问题,昨天没发现,能否删掉重复项,图名一样的就保留一个

图号,图名,总页码
图号1,图名1,总页码1
图号2,图名2,总页码2
图号3,图名3,总页码3
图号3,图名3,总页码3
图号3,图名3,总页码3

点评

这觉得这样还能检查有没有重复的图纸名称,不过输出的结果中我认为应该有文件名  发表于 2014-10-27 13:41
回复

使用道具 举报

 楼主| 发表于 2014-10-27 14:46 | 显示全部楼层
vectra 发表于 2014-10-26 23:18
1~3已修改,现在可以从任意dwg文件中运行extract命令,然后选择要处理目录里的一个文件,则该目录里的所有 ...

有时是图名和图号 总页码都是一样的  因为有时候一个图名或者一个图号会有很多页!
所以不重复最好  
回复

使用道具 举报

 楼主| 发表于 2014-10-27 17:27 | 显示全部楼层
后续用exl数据-->筛选排序-->消除重复项
处理下就可以了!
回复

使用道具 举报

发表于 2015-9-6 22:22 来自手机 | 显示全部楼层
这么好的程序!如能加入时间就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 16:17 , Processed in 0.192719 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表