查找字符串-做某事
我有几个关于如何做某事的问题。。。鉴于以下情况。。
原始帖子
(defun chkmtxtstr (matchstr / mtxtset lst)
(if (setq mtxtset (ssget "_X" '((0 . "MTEXT"))))
(if
(setq lst
(vl-remove-if-not
'(lambda (x)
(wcmatch
(strcase (vla-get-textstring x))
(strcat "*" (strcase matchstr) "*")
)
)
(mapcar
'vlax-ename->vla-object
(vl-remove-if
'listp
(mapcar 'cadr (ssnamex mtxtset))
)
)
)
)
(alert (strcat "The string '" matchstr "' was found."))
)
)
lst
)
;;;useage - (chkmtxtstr "MyTextString")
1) 如何将文本字符串硬编码到此代码中?是“x”吗??
2) 如何将找到的文本对象分配给变量,以便对其执行其他操作?
ie:(命令“change”XX““La”0“c”bylayer”)
(在我的例子中,在特定选项卡/布局上只有一个找到的字符串实例。)没有倍数的可能性。
这只是一个猜测,因为我现在不能真正玩例程(lambda函数吓到我了,哈哈)
也许您需要将(setq mtxtset(ssget“_X”'((0。“MTEXT”))更改为(setq mtxtset“硬编码字符串”)。
你想硬编码哪个文本?假设有两种选择,要么是要搜索的文本(作为matchstr传递给这个LISP),要么是要搜索的文本字符串的硬编码,这里是mtxtset。 由于要找到的字符串已经被传递给函数的参数,您可以通过定义另一个函数来“硬编码”它,该函数使用硬编码字符串评估您的函数,例如:
(defun c:test ( )
(chkmtxtstr "MyTextString")
)
不过,如果您对区分大小写的匹配感到满意,并且假设多行文字内容没有格式,并且不跨越多个DXF第3组条目,那么代码可以变得简单得多-请考虑以下内容:
(defun find ( str )
(ssget "_X" (list '(0 . "MTEXT") (cons 1 (strcat "*" str "*"))))
)
由于上述操作将返回一个选择集,因此可以按以下方式调用它:
(defun c:test ( / sel )
(if (setq sel (find "YourString"))
(command "_.change" sel "" "_p" "_la" "0" "_c" "ByLayer" "")
)
(princ)
) 很高兴看到你发布Lee
页:
[1]