乐筑天下

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

[编程交流] Foreach问题

[复制链接]

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:33:35 | 显示全部楼层 |阅读模式
下面列出的第二个代码是我需要帮助的部分。为什么它不起作用?我试着分析它,把东西移来移去,但我想不出来。我在acad中做了一个测试,用这个示例弹出一个警报:
 
  1. foreach lay (layoutlist)(command "._layout" "set" lay)(alert "hi"))

 
这奏效了。它弹出了一个警报,然后当我单击ok时,转到下一个选项卡并执行了它,依此类推。我需要LISP转到每个选项卡,读取适当的文本值,并将其存储在中。csv。我相信这很简单,请温柔一点
 
  1. (defun getdata (/)
  2.    (foreach lay (layoutlist)
  3.    (command "._layout" "set" lay)
  4.        ((command "pspace")
  5.        (setq xnum(ssget "_W" (list 49 0)(list 0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNUM")))))
  6.        (setq xname(ssget "_W" (list 49 0)(list 0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNAME")))))
  7.        (setq snum(vla-get-textstring(vlax-ename->vla-object (ssname xnum 0))))
  8.        (setq sname(vla-get-textstring(vlax-ename->vla-object (ssname xname 0))))
  9.    ;(setq layout1 (getvar "ctab"))
  10.        (write-line (strcat snum "," sname) slist1))
  11.    )
  12.    ;(setvar "ctab" clayout)
  13. )
  14. (defun c:slist (/)
  15.    (setq clayout (getvar "ctab"))
  16.    (setq slist1 (open (strcat (getvar "dwgprefix") "Sheetlist.csv") "w"))
  17.    (write-line "SHEET NUMBER,SHEET NAME" slist1)
  18.    (getdata)
  19.    (close slist1)
  20.    (setvar "ctab" clayout)
  21.    (princ)
  22. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 08:40:57 | 显示全部楼层
你有额外的括号
 
  1. [highlight]([/highlight](command "pspace")

 
我不知道什么样的多行文字实体有dxf关联(-3(“MMI-*”),也许我不知道你在做什么?
 
M、 R。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:43:36 | 显示全部楼层
 
它是一个扩展数据AppID筛选器
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:51:36 | 显示全部楼层
确实是扩展数据
 
@马克-这不是一个额外的括号。我把这个集合放在那里,对以下函数进行分组。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:53:17 | 显示全部楼层
 
不能在LISP中用括号“分组”函数。
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 08:58:46 | 显示全部楼层
:哎哟:我的意思是,团队不仅仅是我自己的组织工具。即使我去掉那些额外的括号,代码仍然无法工作。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:01:23 | 显示全部楼层
考虑以下[未经测试的]代码:
 
  1. (defun c:slist ( / ctab file s1 s2 )
  2.    (if
  3.        (and
  4.            (setq file (findfile (strcat (getvar 'DWGPREFIX) "Sheetlist.csv")))
  5.            (setq file (open file "w"))
  6.        )
  7.        (progn
  8.            (setq ctab (getvar 'CTAB))
  9.            (write-line "SHEET NUMBER,SHEET NAME" file)
  10.            (foreach layout (layoutlist)
  11.                (setvar 'CTAB layout)
  12.                (command "_.zoom" "_E")
  13.                (if
  14.                    (and
  15.                        (setq s1 (ssget "_W" '(49 0) '(0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNUM")))))
  16.                        (setq s2 (ssget "_W" '(49 0) '(0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNAME")))))
  17.                    )
  18.                    (write-line
  19.                        (strcat
  20.                            (cdr (assoc 1 (entget (ssname s1 0)))) ","
  21.                            (cdr (assoc 1 (entget (ssname s2 0))))
  22.                        )
  23.                        file
  24.                    )
  25.                    (princ (strcat "\nMText not found in layout: " layout))
  26.                )
  27.            )
  28.            (close file)
  29.            (setvar 'CTAB ctab)
  30.        )
  31.        (princ "\nFile not found or could not be opened.")
  32.    )
  33.    (princ)
  34. )
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 09:10:22 | 显示全部楼层
在初始测试中,这是有效的。
 
Mac先生。。。我相信这是你第一次听到这个,但你就是那个人。就我所知,你注意到我的代码为什么失败了吗?从我半新手的角度来看,它看起来很相似,但我认为它失败了,因为我的“foreach”设置方式。。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:11:45 | 显示全部楼层
谢谢
 
这可能是在检索SelectionSet之前我的代码中的最大化显示,因为对于窗口/交叉选择,对象必须在屏幕上可见才能被选择。除此之外,我只是添加了一些错误捕捉,并使用CTAB Sys Var来切换布局,而不是对布局命令的命令调用。
 
您可能希望通过将选择集过滤器列表更改为以下内容来修改我的代码:
 
  1. (list '[font=monospace][/font](0 . "MTEXT") '(-3 ("MMI-SHTNUM")) (cons 410 layout))

 
因此,仅选择布局空间中的多行文字。
 
很乐意帮忙,
 
回复

使用道具 举报

20

主题

95

帖子

75

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 09:16:33 | 显示全部楼层
明白了。。。我甚至没有想过使用CTAB与布局。我会附上你的建议,并添加了一些小事情以及。
 
我可能会回来问一些问题。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 09:03 , Processed in 0.368331 second(s), 72 queries .

© 2020-2025 乐筑天下

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