jmerch 发表于 2022-7-6 08:33:35

Foreach问题

下面列出的第二个代码是我需要帮助的部分。为什么它不起作用?我试着分析它,把东西移来移去,但我想不出来。我在acad中做了一个测试,用这个示例弹出一个警报:
 
foreach lay (layoutlist)(command "._layout" "set" lay)(alert "hi"))
 
这奏效了。它弹出了一个警报,然后当我单击ok时,转到下一个选项卡并执行了它,依此类推。我需要LISP转到每个选项卡,读取适当的文本值,并将其存储在中。csv。我相信这很简单,请温柔一点
 
(defun getdata (/)
   (foreach lay (layoutlist)
   (command "._layout" "set" lay)
       ((command "pspace")
       (setq xnum(ssget "_W" (list 49 0)(list 0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNUM")))))
       (setq xname(ssget "_W" (list 49 0)(list 0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNAME")))))
       (setq snum(vla-get-textstring(vlax-ename->vla-object (ssname xnum 0))))
       (setq sname(vla-get-textstring(vlax-ename->vla-object (ssname xname 0))))
   ;(setq layout1 (getvar "ctab"))
       (write-line (strcat snum "," sname) slist1))
   )
   ;(setvar "ctab" clayout)
)

(defun c:slist (/)
   (setq clayout (getvar "ctab"))
   (setq slist1 (open (strcat (getvar "dwgprefix") "Sheetlist.csv") "w"))
   (write-line "SHEET NUMBER,SHEET NAME" slist1)
   (getdata)
   (close slist1)
   (setvar "ctab" clayout)
   (princ)
)

marko_ribar 发表于 2022-7-6 08:40:57

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

Lee Mac 发表于 2022-7-6 08:43:36

 
它是一个扩展数据AppID筛选器

jmerch 发表于 2022-7-6 08:51:36

确实是扩展数据
 
@马克-这不是一个额外的括号。我把这个集合放在那里,对以下函数进行分组。

Lee Mac 发表于 2022-7-6 08:53:17

 
不能在LISP中用括号“分组”函数。

jmerch 发表于 2022-7-6 08:58:46

:哎哟:我的意思是,团队不仅仅是我自己的组织工具。即使我去掉那些额外的括号,代码仍然无法工作。

Lee Mac 发表于 2022-7-6 09:01:23

考虑以下[未经测试的]代码:
 
(defun c:slist ( / ctab file s1 s2 )
   (if
       (and
         (setq file (findfile (strcat (getvar 'DWGPREFIX) "Sheetlist.csv")))
         (setq file (open file "w"))
       )
       (progn
         (setq ctab (getvar 'CTAB))
         (write-line "SHEET NUMBER,SHEET NAME" file)

         (foreach layout (layoutlist)
               (setvar 'CTAB layout)
               (command "_.zoom" "_E")
               (if
                   (and
                     (setq s1 (ssget "_W" '(49 0) '(0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNUM")))))
                     (setq s2 (ssget "_W" '(49 0) '(0 37) '((0 . "MTEXT") (-3 ("MMI-SHTNAME")))))
                   )
                   (write-line
                     (strcat
                           (cdr (assoc 1 (entget (ssname s1 0)))) ","
                           (cdr (assoc 1 (entget (ssname s2 0))))
                     )
                     file
                   )
                   (princ (strcat "\nMText not found in layout: " layout))
               )
         )
         (close file)
         (setvar 'CTAB ctab)
       )
       (princ "\nFile not found or could not be opened.")
   )
   (princ)
)

jmerch 发表于 2022-7-6 09:10:22

在初始测试中,这是有效的。
 
Mac先生。。。我相信这是你第一次听到这个,但你就是那个人。就我所知,你注意到我的代码为什么失败了吗?从我半新手的角度来看,它看起来很相似,但我认为它失败了,因为我的“foreach”设置方式。。。。

Lee Mac 发表于 2022-7-6 09:11:45

谢谢
 
这可能是在检索SelectionSet之前我的代码中的最大化显示,因为对于窗口/交叉选择,对象必须在屏幕上可见才能被选择。除此之外,我只是添加了一些错误捕捉,并使用CTAB Sys Var来切换布局,而不是对布局命令的命令调用。
 
您可能希望通过将选择集过滤器列表更改为以下内容来修改我的代码:
 
(list '(0 . "MTEXT") '(-3 ("MMI-SHTNUM")) (cons 410 layout))
 
因此,仅选择布局空间中的多行文字。
 
很乐意帮忙,
 

jmerch 发表于 2022-7-6 09:16:33

明白了。。。我甚至没有想过使用CTAB与布局。我会附上你的建议,并添加了一些小事情以及。
 
我可能会回来问一些问题。
页: [1] 2
查看完整版本: Foreach问题