找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1143|回复: 10

[字符串] 转义通配符

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-5-9 15:24:58 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::STRING:Escapewildcards
调用格式: (XD::STRING:Escapewildcards str)
参数说明: str ----- 字符串
返回值: 字符串
函数简介: 转义通配符
函数来源: 原创
函数作者: marting
适用版本: 不限 
最后更新时间: 2017-05-09
备注: -
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 marting 于 2017-5-9 17:40 编辑

SSGET的一些字符串是统配符,比如. # , *等等,如果要过滤的字符串中包括这些,会过滤不到,用下面这个函数转义下就OK 了。

  1. (defun XD::STRING:Escapewildcards (str / tf)
  2.   (vl-list->string (apply
  3.                      'append
  4.                      (mapcar
  5.                        '(lambda (c)
  6.                           (if (or
  7.                                 (> c 128)
  8.                                 tf
  9.                               )
  10.                             (progn
  11.                               (if (not tf)
  12.                                 (setq tf t)
  13.                                 (setq tf nil)
  14.                               )
  15.                               (list c)
  16.                             )
  17.                             (progn
  18.                               (setq tf nil)
  19.                               (if (member c '(35 64 46 42 63 126 91 93 45 44))
  20.                                 (list 96 c)
  21.                                 (list c)
  22.                               )
  23.                             )
  24.                           )
  25.                         )
  26.                        (vl-string->list str)
  27.                      )
  28.                    )
  29.   )
  30. )


命令: (XD::STRING:ESCAPEWILDCARDS "建筑#34.2设计,CAD")
"建筑`#34`.2设计`,CAD"

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 444个

财富等级: 日进斗金

发表于 2017-5-9 17:06:29 | 显示全部楼层
(defun $YF_StrEscapewildcards (str / strlst n result var)
   (setq strlst (vl-string->list str)
         n 0
         result '()
   )
   (repeat (length strlst)
      (setq var (nth n strlst))
      (if
         (and
            (member var '(35 64 46 42 63 126 91 93 45 44))
            (> n 0)
            (< (nth (1- n) strlst) 127)
         )
         (setq result (append result (list 96 var)))
         (setq result (append result (list var)))
      )
      (setq n (1+ n))
   )
   (vl-list->string result)
)

评分

参与人数 1D豆 +5 收起 理由
marting + 5 有始有终奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 0 反对 1

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-5-9 15:50:33 | 显示全部楼层
                                 
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

发表于 2017-5-9 16:19:48 | 显示全部楼层
(vl-list->string '(180 64))
双字符的汉字有问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2017-5-9 16:25:11 | 显示全部楼层

举个函数调用的完整例子,看看转什么样了? 转义符ASCII应该不在汉字的ASCII内。

命令: (XD::STRING:ESCAPEWILDCARDS "建#.筑#34.2设计,CAD")
"建`#`.筑`#34`.2设计`,CAD"


把你出错的字符列下看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2017-5-9 16:54:52 | 显示全部楼层
大师,确实有BUG的,如:
(XD::STRING:Escapewildcards "碄")   ==》 "碻@"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

发表于 2017-5-9 17:04:38 | 显示全部楼层
汉字是双字节的ascii码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

发表于 2017-5-9 17:07:11 | 显示全部楼层
($YF_StrEscapewildcards "碄#.3.14")
"碄`#`.3`.14"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2017-5-9 17:27:30 | 显示全部楼层
本帖最后由 marting 于 2017-5-9 17:42 编辑

修改了代码,拷贝回去再试试

命令: (vl-list->string '(180 64))
"碄"

命令: (XD::STRING:Escapewildcards "碄.建筑12.334设计#")
"碄`.建筑12`.334设计`#"

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5188个

财富等级: 富甲天下

发表于 2017-5-16 09:14:56 | 显示全部楼层
YueFeng版主的程序更简洁,但marting的速度更快
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-25 02:18 , Processed in 0.224141 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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