乐筑天下

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

[编程交流] 如何访问列表元素

[复制链接]

34

主题

123

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 08:42:23 | 显示全部楼层 |阅读模式
我有BlktagValLst块列表,其中包含如下组织的列表元素:
 
(blknme-A tag1 tagvlu1A)
(blknme-A tag2 tagvlu2A)
(blknme-A tag3 tagvlu3A)
 
(blknme-B tag1 tagvlu1B)
(blknme-B tag1 tagvlu1B)
(blknme-B tag1 tagvlu1B)
 
等等,对于大量的块。
 
我需要访问标记值,所以我尝试了以下方法:
  1.   
  2. (and (= (car (assoc  blknme-A BlktagValLst)) blknme-A) ;if block name is blknme-A
  3.         (= (cadr (assoc blknme-A BlktagValLst)) tag1) ; and tag is tag1
  4.         (setq pntxt (caddr blknme-A BlktagValLst)))) ; ;save tag value in pntxt
  5. (and (= (car (assoc  blknme-A BlktagValLst)) blknme-A) ;if block name is blknme-A
  6.         (= (cadr (assoc blknme-A BlktagValLst)) [color=red]tag2[/color]) ; and tag is tag2
  7.         (setq [color=red]descrixt[/color] (caddr blknme-A BlktagValLst)))) ; ;save tag value in [color=red]descrixt[/color]

 
需要帮助才能实现这一功能,或者需要更好的方式。
 
谢谢
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:54:11 | 显示全部楼层
相关列表的内容是虚线对而不是标准列表(点条目除外);因此,应通过CDR而不是CADR访问第二个条目。此外,您不需要验证DXF键(汽车项目)。
 
当做
米尔恰
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:04:51 | 显示全部楼层
我建议将块数据重组为:
 
然后任务变成:
 
  1. (cdr (assoc "TagName" (cdr (assoc "BlockName" lst))))
回复

使用道具 举报

34

主题

123

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 09:22:00 | 显示全部楼层
谢谢李,
我正在研究你的建议。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:22:52 | 显示全部楼层
如果要使用原始数据,请使用以下三个函数从块/标记名中检索值:
 
  1. (defun GetValue ( block tag lst / value )
  2.    (while (and (setq item (car lst)) (not value))
  3.        (if (and (eq block (car item)) (eq tag (cadr item)))
  4.            (setq value (caddr item))
  5.        )
  6.        (setq lst (cdr lst))
  7.    )
  8.    value
  9. )
  1. (defun GetValue2 ( block tag lst )
  2.    (vl-some '(lambda ( item ) (if (and (eq block (car item)) (eq tag (cadr item))) (caddr item))) lst)
  3. )
  1. (defun GetValue3 ( block tag lst / _massoc )
  2.    (defun _massoc ( key lst / item )
  3.        (if (setq item (assoc key lst))
  4.            (cons (cdr item) (_massoc key (cdr (member item lst))))
  5.        )
  6.    )
  7.    (cadr (assoc tag (_massoc block lst)))
  8. )

 
例如。:
 
  1. (setq lst
  2.   '(
  3.        ("Block1" "Tag1" "b1Value1")
  4.        ("Block1" "Tag2" "b1Value2")
  5.        ("Block1" "Tag3" "b1Value3")
  6.        ("Block2" "Tag1" "b2Value1")
  7.        ("Block2" "Tag2" "b2Value2")
  8.        ("Block2" "Tag3" "b2Value3")
  9.    )
  10. )

 
  1. _$ (GetValue "Block2" "Tag2" lst)
  2. "b2Value2"
  3. _$ (GetValue2 "Block2" "Tag2" lst)
  4. "b2Value2"
  5. _$ (GetValue3 "Block2" "Tag2" lst)
  6. "b2Value2"

 
快速测试:
  1. (setq i 9)
  2. (repeat 9
  3.    (setq j 9)
  4.    (repeat 9
  5.        (setq l (cons (list (strcat "Block" (itoa i)) (strcat "Tag" (itoa j)) (strcat "b" (itoa i) "Value" (itoa j))) l))
  6.        (setq j (1- j))
  7.    )
  8.    (setq i (1- i))
  9. )

 
  1. (
  2.   ("Block1" "Tag1" "b1Value1")
  3.   ("Block1" "Tag2" "b1Value2")
  4.   ("Block1" "Tag3" "b1Value3")
  5.   ("Block1" "Tag4" "b1Value4")
  6.   ("Block1" "Tag5" "b1Value5")
  7.   ("Block1" "Tag6" "b1Value6")
  8.   ("Block1" "Tag7" "b1Value7")
  9.   ("Block1" "Tag8" "b1Value8")
  10.   ("Block1" "Tag9" "b1Value9")
  11.   ("Block2" "Tag1" "b2Value1")
  12.   ("Block2" "Tag2" "b2Value2")
  13. ...
  14.   ("Block9" "Tag9" "b9Value9")
  15. )

 
  1. _$ (GetValue "Block6" "Tag7" l)
  2. "b6Value7"
  3. _$ (GetValue2 "Block6" "Tag7" l)
  4. "b6Value7"
  5. _$ (GetValue3 "Block6" "Tag7" l)
  6. "b6Value7"

 
  1. 11
回复

使用道具 举报

34

主题

123

帖子

90

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
175
发表于 2022-7-6 09:41:38 | 显示全部楼层
我选择了用这个——它是最快的,不是吗。
它是这样集成的
实际上,它是构成简单BOM的代码的一部分。(零件号、说明和数量)。
 
它工作得很好。非常感谢李。
 
我已经试过你的COUNT lisp-它不会打印属性,所以我的情况不是这样。
 
现在,我正在研究将这些数据放入一个可以插入到图形中的表中(如COUNT lisp)
 
再次感谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:52:05 | 显示全部楼层
不客气,萨杜!祝你的计划顺利
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 08:58 , Processed in 0.548139 second(s), 66 queries .

© 2020-2025 乐筑天下

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