yjpyjp
发表于 2019-4-26 14:22:49
1291500406 发表于 2019-4-26 13:20
(defun c:bb ()(sssetfirst nil (ssget (list '(0 . "text,mtext") (cons 1 (strcat "*" (cdr(assoc 1 (e ...
em 。好像后面那个点取查找文本部分有问题,输入查找的没问题
还有 能否改成忽略输入的大小写
1291500406
发表于 2019-4-26 14:36:06
本帖最后由 1291500406 于 2019-4-26 14:38 编辑
yjpyjp 发表于 2019-4-26 14:22
em 。好像后面那个点取查找文本部分有问题,输入查找的没问题
还有 能否改成忽略输入的大小写
http://bbs.mjtd.com/forum.php?mo ... =%B4%F3%D0%A1%D0%B4
wcmatch(函数)
将模式字符串与某指定的字符串进行匹配比较. (wcmatch string pattern)
wcmatch 函数将字符串 string 与模式字符串 pattern 进行比较,看它们是否相匹配。如果匹配,
它返回 T;否则它返回 nil。string 和 pattern 这两个参数既可以是由双引号引起来的字符串,也可以
是变量。pattern 参数中可以包含下表所列的通配符。本函数仅对 string 和 pattern 中最前面的 500 个
字符进行比较,超过 500 个字符之后的那些字符会被忽略。 通配符
通配符 说明
140
# 匹配任意单个数字字符
@ 匹配任意单个字母字符
.(圆点) 匹配任意单个非字母数字字符
*(星号) 匹配任意字符序列,包括空字符串,它可以出现在任何位置,包括开头、中间
和结尾处
?(问号) 匹配任意单个字符
~(波浪号) 如果它是模式字符串的第一个字符,则匹配除此字符串之外的任意字符串
[...] 匹配括号中的任意一个字符
[~...] 匹配不在括号中的任意单个字符
-(连字符) 用在括号里面,用来指明单个字符的取值范围
,(逗号) 分隔两个模式字符串
`(反引号) 特殊转义字符(按字义读取随后的字符)
(wcmatch "Name" "N*") 返回 T
该例子测试字符串 "Name" 是否以字符 N 开头。可以在模式字符串中使用逗号来分隔多个测试
条件,下例就进行三个比较:
(wcmatch "Name" "???,~*m*,N*") 返回 T
只要字符串匹配上述三个模式字符串中的任何一个,wcmatch 函数就返回 T。在本例中进行的测
试有:"Name" 有三个字符(为假);"Name" 中不含字符 m(为假);"Name" 以字符 N 开头(为真)。
由于满足了其中至少一个条件,所以表达式返回 T。
本函数进行的比较是区分大小写的,所以其大写和小写必须匹配。在 string 和 pattern 参数中,
可以使用由 AutoLISP 函数返回的变量和值。
为了测试一个字符串中的通配符,必须使用单个反引号 (`) 来转义字符。转义是指跟在单个反引
号后面的字符不当作通配符读取,而是按其表面值进行比较。例如,为了测试在字符串 "Name" 中是
否包含逗号,可以使用如下表达式:
(wcmatch "Name" "*`,*") 返回 nil
注意 由于 AutoLISP 的后续版本中可能会加入其他的通配符,所以建议在样本中给所有非字母
数字字符加上转义字符转义,以确保它的向上兼容性。
由于 C 和 AutoLISP 程序设计语言都使用反斜杠 (\) 作为转义字符,所以在字符串中必须使用
两个反斜杠 (\\) 才能产生一个反斜杠。为了测试字符串 "Name" 中是否包含一个反斜杠,可以使用如
下表达式:
(wcmatch "Name" "*`\\*") 返回 nil
所有包含在括号 ([ . . . ]) 中的字符都按字义读取,所以不必使用转义字符。但有如下例外:波浪
号 (~) 只有当它不是括号里的第一个字符(如 "")时才按字义读取;否则作为一个“非”字
符读取它,这意味着 wcmatch 函数将匹配跟随在波浪号之后那些字符(如 "[~ABC]")之外的所有字
符。而连字符 (-) 则只有当它是括号中的第一个字符或最后一个字符(如 "[-ABC]" 或 "")时,
才按字义读取。否则,在括号中的连字符用于指定某特定字符的取值范围。该范围仅限于单个字符,
所以,"STR" 与 STR1、STR2、STR3 和 STR8 匹配,而 "" 与任意单个大写字母匹配。
如果闭括号 (")") 是括号内的首个字符或跟随在波浪号之后(如 "[ ]ABC)" 或 "[~]ABC)"),
它将被按字义读取。
fangmin723
发表于 2019-4-26 16:18:44
半听可乐 发表于 2019-4-16 19:18
有带连线的程序吗?不求多目标查找,每次查找单一目标即可,之前见院长演示过
(defun c:ll (/ n pt ss str)
(if (setq str (getstring "\n输入文字含有的字符:"))
(progn
(setq str (strcat "*" str "*") n 0pt (getpoint "\n指定集合点:"))
(repeat (sslength (setq ss (ssget "X" (list '(0 . "*TEXT") (cons 1 str)))))
(entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (cdr (assoc 10 (entget (ssname ss n))))) '(62 . 2)))
(setq n (+ n 1))
)
)
)
)
消失的天空
发表于 2019-5-1 09:18:48
我见过,真正用可以连线,可以亮显
1291500406
发表于 2019-5-1 14:19:12
本帖最后由 1291500406 于 2019-5-1 14:21 编辑
消失的天空 发表于 2019-5-1 09:18
我见过,真正用可以连线,可以亮显
楼上大神的代码加一句话就可以连线和亮显
(defun c:ll (/ n pt ss str)(if (setq str (getstring "\n输入文字含有的字符:"))
(progn(setq str (strcat "*" str "*") n 0pt (getpoint "\n指定集合点:"))
(repeat (sslength (setq ss (ssget "X" (list '(0 . "*TEXT") (cons 1 str)))))
(entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (cdr (assoc 10 (entget (ssname ss n))))) '(62 . 1)))
(setq n (+ n 1)))))(sssetfirst nil ss))
wolaixuexi
发表于 2019-6-21 16:43:14
好东西,谢谢分享
依然小小鸟
发表于 2019-6-21 17:13:27
1291500406 发表于 2019-5-1 14:19
楼上大神的代码加一句话就可以连线和亮显
(defun c:ll (/ n pt ss str)(if (setq str (getstring "\n输 ...
能辛苦组合在一起吗新手不太会
心中的梦想
发表于 2019-6-21 19:02:52
谢谢分享!!!!
390311997
发表于 2019-6-24 21:57:15
谢谢分享!!!!!!
200853006
发表于 2019-6-27 10:16:04
依然小小鸟 发表于 2019-6-21 17:13
能辛苦组合在一起吗新手不太会
(defun c:2121 (/ n pt ss str)
(if (setq str (getstring "\n输入文字含有的字符:"))
(progn(setq str (strcat "*" str "*") n 0pt (getpoint "\n指定集合点:"))
(repeat (sslength (setq ss (ssget "X" (list '(0 . "*TEXT") (cons 1 str)))))
(entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (cdr (assoc 10 (entget (ssname ss n))))) '(62 . 1)))
(setq n (+ n 1)))))(sssetfirst nil ss))
(setq n (+ n 1))
)
)
)
)
我也不会,要是能框选拾取目标字符, 然后再框选范围就完美了。