一个非常方便适用的字符串替换函数
本帖最后由 ljxkm 于 2019-8-3 13:18 编辑个非常方便适用的字符串替换函数:
自己编来自己用的,非常方便适用,自己用的结果处理一般字符替换足够了,贴出来有需要的可以参考使用。
;;;;函数名称: ljx-string-translate
;;;;调用格式: (ljx-string-translate newtx oldtx str)
;;;;参数说明: newtx ----- 要替换成的新字符,newtx为""时相当于删除字符功能,非常好用
;;;; oldtx-要替换的旧字符
;;;; str在str字符中替换
;;;;返回值: (ljx-string-translate "xx" "a" "123xxjkhxx") 返回""123ajkha""、
;;;; (ljx-string-translate "xx" "" "123xxjkhxx")返回"123jkh"
;;;;函数简介: 字符串替换函数,要替换的源字符与新字符长度可以不同,替换非常灵活好用
;;;;函数来源: 原创
;;;;函数作者: jixiangluo
;;;;适用版本: 不限
;;;;最后更新时2019-08-01
这是个啥 你总要发个用法怎么个个替换方式噻 本帖最后由 ljxkm 于 2019-8-3 13:16 编辑
taoyi0727,这样就对了,贴出东西来,主要是大家交流,取长补短,我那是几年前写的,细追确实有问题,今天上午我又写了一个,把他贴出来,也算一个交代吧,我在附件的zfcth.lsp里面改了,基本上达到了我的预想,原来那个主要是相同字符越替换越多,导致了死循环,这个应该就不会了,原来的我也留下,新代码如下:
(defun ljx-string-translate (newtx oldtx str / str1 strL oldL txt tx1 tx2 n1)
(setq str1 str
strL (strlen str1)
oldL (strlen oldtx)
txt ""
)
(while (setq n1 (vl-string-search oldtx str1 ))
(setq tx1 (substr str1 1 n1)
tx2 (substr str1 (+ n1 1 oldL) (- strL (strlen tx1) oldL))
txt (strcat txt tx1 newtx)
)
(setq str1 tx2
strL (strlen str1)
)
)
(setq txt (strcat txt str1))
);;;;defun taoyi0727 发表于 2019-8-3 12:00
我写了一个 不知道我的思路和你的是不是一样的 (写了一上午,写了改,改了写,都有BUG)
;;说明:字符串替 ...
taoyi0727,我看了你那个是可以的,也比较简洁,其实问题的关键是在vl-string-subst函数的使用上,我学lisp是铁道出版社的AutoLisp学习导引及配套那本函数帮助,当时不知有没有明经通道这样的论坛,上面的这个函数的帮助说明好像都是“in”替换“to”这样的,当时一点一点的试,就认为只能替换一样长度的,还在书上注明,故才绕了那么大个圈,去写这个函数,我后来贴上去这个函数也没有用到vl-string-subst,大家一讨论,你的那个程序一写,我一试,再看看wen1235说的,明白了,这些地方不晒晒,恐怕永远发现不了啊,Lisp特别是vLisp函数,那么多,要全部整明白用的精,也不可能吧,所以学习交流很有必要哈。 taoyi0727:(ljx-string-translate "xx" "a" "123xxjkhxx") 返回""123ajkha""、
(ljx-string-translate "xx" "" "123xxjkhxx")返回"123jkh"
就是用法啊 不好意思啊,我是想附件收费,搞成主题收费了,这一下就看得见了 发现问题:(ljx-string-translate "xx" "xxx" "xx") 当替换字符包含原来字符的时候会卡死不动 start4444,我试了一下,没卡死啊,(ljx-string-translate "xx" "xxx" "xx")的结果是"xx",但我想不明白,怎么会出现你说的那种替换,逻辑上不通,oldtx="xxx"已经大于str="xx"的长度了 (ljx-string-translate "小人" "大人" "asd大人小人大人")返回"asd小人小人小人" 好像也没什么不对啊 (ljx-string-translate "大人和小人" "大人" "asd大人小人大人")你试试这个 坐等释义,希望可以打上补丁
本帖最后由 ljxkm 于 2019-8-2 20:34 编辑
是出现了死循环,看样子这钱还真不好收啊,以前一直用着没什么问题,一般的使用还是没什么问题,这是几年前编的程序了,大家下载了就先用着吧,既然贴出来了,我抽时间重新写一个啊,源码也贴出给大家啊,其实也不想收什么钱,图个什么,只是觉得来论坛很长时间了,下载学到了不少东西,也得到了大家很多的帮助,自己觉得也应该做点什么,觉得好用的东西贴出来,不曾想还有那么多问题,真是没有最好只有更好啊,我自己贴的题,争取自己来解吧,现在再来写应该比这个更好哈,感谢提意见,转过来看,这对自己也是一种鞭策、提高哈。{:1_1:}
页:
[1]
2