乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 34|回复: 16

[编程交流] li命令的数据提取

[复制链接]

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 13:17:47 | 显示全部楼层 |阅读模式
所以我试图创建一个完整的系统,这样我就可以用大约3个按钮来设计一个电子原理图。大部分都完成了,但我在最后一部分遇到了一堵墙,那就是出口物料清单。问题是,我基本上需要从命令行运行数据提取向导,据我所知,这是无法完成的(如果我错了,请纠正我)。因此,我开始为命令行重新创建向导,或多或少就是这样。但是现在我需要帮助,我附上了我的代码副本(大部分是从不同的人那里借来的)。最初是打印块名和句柄,我不需要它们,所以我一直在尝试删除它们,但现在当我运行脚本时,它会创建一个如下的工作表:
nil[td][td][td][td][td][td][td][td]
(标记TD65)N/a[td][td]15[td][td]18[td][td][td][td][tr tr][td](标记TD66)N/a[td][td]12[td][td]13[td][td][td][tr tr td]无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无无[td][td][td][td][td]
(标记TD69)N/a1516[td][td][tr]
nilN/a[td][td][tr td][td](标记CR32)N/a[td][td][td][tr]
(TAG.CR)N/a[td][td][td][td][tr]
(TAG.SW5)N/a[td][td][tr tr td](TAG.TD66)N/a1516[td]
(标记LT3)不适用[td][td][td][td][td]

TAG是我想要包含在列表中的标签的名称,我不知道为什么它会这样打印,N/a是手柄的位置,但我似乎无法摆脱它打印它。。。这方面的任何帮助都会很好。
 
最后,我还想将这个excel文件与另一个excel文件结合起来,类似于数据提取命令允许您包含外部数据的方式,如果您能提供任何帮助,也将不胜感激。
回复

使用道具 举报

0

主题

946

帖子

978

银币

限制会员

铜币
-3
发表于 2022-7-5 13:22:19 | 显示全部楼层
如果你有一个测试图,你可以保存在AC2010格式,并附加到一个新的职位。这将对调试代码有很大帮助。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 13:28:13 | 显示全部楼层
这是一张测试图
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 13:29:07 | 显示全部楼层
是这样的吗?
  1. ;Gilles Chanteau ;Modified by Júnior Nogueira
  2. (defun c:Demo (/ ss file i)
  3.   (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1) (2 . "test,`*U*"))))
  4.     (progn
  5.       (setq file (open (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ".csv") "w"))
  6.       (repeat (setq i (sslength ss))
  7.         (setq br (ssname ss (setq i (1- i))))
  8.         (if (= (getpropertyvalue (getpropertyvalue br "BlockTableRecord") "Name") "test")
  9.           (write-line
  10.             (strcat
  11.               (getpropertyvalue br "TAG")
  12.               ","
  13.               (getpropertyvalue br "PN")
  14.               ","
  15.               (getpropertyvalue br "FIND#")
  16.               ","
  17.               (getpropertyvalue br "SORT")
  18.               ","
  19.               (getpropertyvalue br "QUANTITY")
  20.             )
  21.             file
  22.           )
  23.         )
  24.       )
  25.       (close file)
  26.     )
  27.   )
  28.   (princ)
  29.   )
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 13:35:20 | 显示全部楼层
初级Nogueira,
 
这看起来可能可行,但我可能需要帮助将其集成到现有程序中。具体来说,如何添加对象选择。。我不太熟悉SS函数。
回复

使用道具 举报

0

主题

946

帖子

978

银币

限制会员

铜币
-3
发表于 2022-7-5 13:36:47 | 显示全部楼层
 
下面的代码将获取图形中的每个属性块,并以以下格式提取块中的每个标记和值对:
 
((“TAG1”.“VALUE1”)(“TAG2”.“VALUE2”)。。。(“*常数*:TAGN”“VALUEN”))
 
我已附上您发送的图纸和修改后的试块。现在它包含一个不可见的常量属性(标记“BLK\U NAME”VALUE“TEST”)
 
代码:
 
  1. ;;  Get all tags and values from block including constant attributes in following form:
  2. ;; (("TAG1" . "VALUE1") ("TAG2" . "VALUE2") ...("*CONSTANT*: TAGN" . "VALUEN"))
  3. (defun get-all-atts ( obj / att_lst catt_lst lst tag )
  4.   (setq att_lst (append (vlax-invoke obj 'getattributes) (setq catt_lst (vlax-invoke obj 'getconstantattributes)))
  5.         lst nil
  6.   );end_setq      
  7.   (foreach att att_lst
  8.     (setq tag (vla-get-tagstring att))
  9.     (if (member att catt_lst)
  10.       (setq lst (cons (cons (strcat "*CONSTANT*: " tag) (vla-get-textstring att)) lst))  
  11.       (setq lst (cons (cons tag (vla-get-textstring att)) lst))
  12.     );end_if
  13.   );end_foreach
  14.   (setq lst (reverse lst))
  15. );end_defun
  16. ;;                        Main part                        ;;
  17. (defun C:ATOUT ( / adoc axss com_data tot)
  18.   (vl-load-com)
  19.   (setq adoc (vla-get-activedocument (vlax-get-acad-object))
  20.         osm (getvar "osmode")
  21.   );end_setq
  22.   (vla-endundomark adoc)
  23.   (vla-startundomark adoc)
  24.   (setvar "osmode" 0)
  25.   (setvar "cmdecho" 0)
  26.   (cond ( (ssget "_X" (list (cons 0 "INSERT")(cons 66 1)));;This will get you all attributed blocks in the drawing
  27.           (setq com_data nil)
  28.           (vlax-for a        (setq axss (vla-get-activeselectionset adoc))
  29.             (setq com_data (cons (get-all-atts a) com_data))
  30.           );end_for
  31.           (setq com_data (reverse com_data)
  32.                 tot (length com_data)
  33.           );end_setq
  34.         )
  35.   );end_cond
  36.   
  37.   (foreach x com_data
  38.     (princ x)
  39.     (princ "\n")
  40.   );end_foreach
  41.   
  42.   (princ)
  43.   (setvar "osmode" 0)
  44.   (vla-endundomark adoc)  
  45. );end_defun

有很多多余的代码,我认为这干扰了收集和打印到excel的内容。接下来我将看excel部分。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 13:41:23 | 显示全部楼层
德拉诺,谢谢你。
 
这更简洁,我可以将整个图形的选择更改为一个选择(这对我的应用程序很重要)。然而,这段代码有一个问题。也就是说,它获取所有属性,我只想打印我列出的5个。在我的图形中,块具有许多属性,这些属性对图形很重要,但对BOM表不重要。也许你知道一种只打印这5张照片的方法?或者如何让Lisp程序只拉这5个。此外,我不需要“(“*常数*:tagn”valuen”)部分,我真的不希望它出现在excel中。我不知道lisp是否需要这个功能。
 
不管怎样,你给了我一个更好的起点。我会处理好这件事,如果我有进展,请告诉你。
谢谢
回复

使用道具 举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 13:45:00 | 显示全部楼层
我不太明白,但也许你需要这样的东西:“Shema”?
回复

使用道具 举报

0

主题

946

帖子

978

银币

限制会员

铜币
-3
发表于 2022-7-5 13:49:56 | 显示全部楼层
 
如果你让我知道五个标记字符串的名称,我可以调整代码。我还需要知道其中是否有常数属性,因为如果不需要常数属性,那么获取和附加常数属性是没有意义的。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 13:52:26 | 显示全部楼层
马拉托维奇-
也许很难说,因为我不懂那种语言。
 
德拉诺-
它们都不是常量,标记名是:“tag”“PN”“FIND”“SORT”“QUANTITY”我能够自己找到一种方法,但我觉得还有更好的方法。因此,我期待着看到您如何将其限制为仅这五个属性。此外,我期待着看到你如何将这些信息写入excel。我所做的对我来说毫无意义,哈哈。
谢谢。
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 00:49 , Processed in 2.059460 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表