明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 至野异族

[资源] 分享一个【查找并选中指定文本内容】的插件

  [复制链接]
发表于 2019-4-26 14:22 | 显示全部楼层
1291500406 发表于 2019-4-26 13:20
(defun c:bb ()(sssetfirst nil (ssget (list '(0 . "text,mtext") (cons 1 (strcat "*" (cdr(assoc 1 (e ...

em 。好像后面那个点取查找文本部分有问题,输入查找的没问题
还有 能否改成忽略输入的大小写
发表于 2019-4-26 14:36 | 显示全部楼层
本帖最后由 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
所有包含在括号 ([ . . . ]) 中的字符都按字义读取,所以不必使用转义字符。但有如下例外:波浪
号 (~) 只有当它不是括号里的第一个字符(如 "[A~BC]")时才按字义读取;否则作为一个“非”字
符读取它,这意味着 wcmatch 函数将匹配跟随在波浪号之后那些字符(如 "[~ABC]")之外的所有字
符。而连字符 (-) 则只有当它是括号中的第一个字符或最后一个字符(如 "[-ABC]" 或 "[ABC-]")时,
才按字义读取。否则,在括号中的连字符用于指定某特定字符的取值范围。该范围仅限于单个字符,
所以,"STR[1-38]" 与 STR1、STR2、STR3 和 STR8 匹配,而 "[A-Z]" 与任意单个大写字母匹配。
如果闭括号 (")") 是括号内的首个字符或跟随在波浪号之后(如 "[ ]ABC)" 或 "[~]ABC)"),
它将被按字义读取。

发表于 2019-4-26 16:18 | 显示全部楼层
半听可乐 发表于 2019-4-16 19:18
有带连线的程序吗?不求多目标查找,每次查找单一目标即可,之前见院长演示过

  1. (defun c:ll (/ n pt ss str)
  2.         (if (setq str (getstring "\n输入文字含有的字符:"))
  3.                 (progn
  4.                         (setq str (strcat "*" str "*") n 0  pt (getpoint "\n指定集合点:"))
  5.                         (repeat (sslength (setq ss (ssget "X" (list '(0 . "*TEXT") (cons 1 str)))))
  6.                                 (entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (cdr (assoc 10 (entget (ssname ss n))))) '(62 . 2)))
  7.                                 (setq n (+ n 1))
  8.                         )
  9.                 )
  10.         )
  11. )
发表于 2019-5-1 09:18 来自手机 | 显示全部楼层
我见过,真正用可以连线,可以亮显
发表于 2019-5-1 14:19 | 显示全部楼层
本帖最后由 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 0  pt (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))



发表于 2019-6-21 16:43 | 显示全部楼层
好东西,谢谢分享
发表于 2019-6-21 17:13 | 显示全部楼层
1291500406 发表于 2019-5-1 14:19
楼上大神的代码加一句话就可以连线和亮显
(defun c:ll (/ n pt ss str)(if (setq str (getstring "\n输 ...

能辛苦组合在一起吗  新手不太会
发表于 2019-6-27 10:16 | 显示全部楼层
依然小小鸟 发表于 2019-6-21 17:13
能辛苦组合在一起吗  新手不太会

(defun c:2121 (/ n pt ss str)
        (if (setq str (getstring "\n输入文字含有的字符:"))
        (progn(setq str (strcat "*" str "*") n 0  pt (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))
                        )
                )
        )
)

我也不会,要是能框选拾取目标字符, 然后再框选范围就完美了。
回复 支持 0 反对 1

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 12:56 , Processed in 0.846708 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表