找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1192|回复: 3

[字符串] (XD::String:SubstNth)替换指定位置字串

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-1 16:05:32 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::String:SubstNth
调用格式: (XD::String:SubstNth new old string n)
参数说明: new - 新字串
old - 需要替换的旧字串
string - 源字串
n - 整数或表,old 字串计数位置
返回值: 字串
函数简介: 替换指定位置字串
函数来源: 原创
函数作者: st788796
适用版本: 不限 
最后更新时间: 2013-12-01
备注: -
演示图片: -

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

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

×
本帖最后由 st788796 于 2013-12-1 16:08 编辑

  1. (defun XD::String:SubstNth (new old str n / pos sl pl np l)
  2.   (if (vl-string-search old str)
  3.     (progn
  4.       (setq pos        0)
  5.       (while (setq np (vl-string-search old str pos))
  6.         (setq pos (1+ pos)
  7.               pl  (cons np pl)
  8.         )
  9.       )
  10.       (setq l (vl-sort pl '<))
  11.       (if (listp n)
  12.         (last
  13.           (mapcar
  14.             '(lambda (x)
  15.                (setq str (vl-string-subst new old str (nth (1- x) l)))
  16.              )
  17.             n
  18.           )
  19.         )
  20.         (vl-string-subst new old str (nth (1- n) l))
  21.       )
  22.     )
  23.     str
  24.   )
  25. )

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

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-12-1 17:00:49 | 显示全部楼层
API

  1. (defun XD::String:SubstNth (new old str n / strl i)
  2.   (if (= (length (setq strl (XD::String:RegexpS
  3.                               (strcat "[^" old "]+|" old)
  4.                               str
  5.                               ""
  6.                             )
  7.                  )
  8.          )
  9.          1
  10.       )
  11.     str
  12.     (progn
  13.       (setq i 0)
  14.       (if (numberp n)
  15.         (setq n (list n))
  16.       )
  17.       (xdrx_string_join
  18.         (mapcar        '(lambda (x)
  19.                    (if (and (= x old)
  20.                             (member (setq i (1+ i)) n)
  21.                        )
  22.                      new
  23.                      x
  24.                    )
  25.                  )
  26.                 strl
  27.         )
  28.         ""
  29.       )
  30.     )
  31.   )
  32. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-12-1 17:24:10 来自手机 | 显示全部楼层
这个很实用,示例中OLd参数只有一位,可以多位吗。?

点评

函数名测试用的 _$ (rrr "@$$$" "11" "33211a112111" 1) "332@$$$a11211" _$ (rrr "@$$$" "11" "33211a112111" 2) "33211a@$$$211" _$ (rrr "@$$$" "11" "33211a112111" '(1 2)) "332@$$$a@$$$211" _$  详情 回复 发表于 2013-12-1 17:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-12-1 17:27:41 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-12-1 17:24
这个很实用,示例中OLd参数只有一位,可以多位吗。?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 03:02 , Processed in 0.366897 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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