ljxkm 发表于 2019-8-2 12:21:06

一个非常方便适用的字符串替换函数

本帖最后由 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

taoyi0727 发表于 2019-8-2 12:25:11

这是个啥   你总要发个用法怎么个个替换方式噻

ljxkm 发表于 2019-8-3 13:08:26

本帖最后由 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

ljxkm 发表于 2019-8-3 16:21:39

taoyi0727 发表于 2019-8-3 12:00
我写了一个 不知道我的思路和你的是不是一样的 (写了一上午,写了改,改了写,都有BUG)

;;说明:字符串替 ...

taoyi0727,我看了你那个是可以的,也比较简洁,其实问题的关键是在vl-string-subst函数的使用上,我学lisp是铁道出版社的AutoLisp学习导引及配套那本函数帮助,当时不知有没有明经通道这样的论坛,上面的这个函数的帮助说明好像都是“in”替换“to”这样的,当时一点一点的试,就认为只能替换一样长度的,还在书上注明,故才绕了那么大个圈,去写这个函数,我后来贴上去这个函数也没有用到vl-string-subst,大家一讨论,你的那个程序一写,我一试,再看看wen1235说的,明白了,这些地方不晒晒,恐怕永远发现不了啊,Lisp特别是vLisp函数,那么多,要全部整明白用的精,也不可能吧,所以学习交流很有必要哈。

ljxkm 发表于 2019-8-2 12:28:52

taoyi0727:(ljx-string-translate "xx" "a" "123xxjkhxx") 返回""123ajkha""、
                     (ljx-string-translate "xx" "" "123xxjkhxx")返回"123jkh"
                  就是用法啊

ljxkm 发表于 2019-8-2 12:35:03

不好意思啊,我是想附件收费,搞成主题收费了,这一下就看得见了

start4444 发表于 2019-8-2 15:56:32

发现问题:(ljx-string-translate "xx" "xxx" "xx") 当替换字符包含原来字符的时候会卡死不动

ljxkm 发表于 2019-8-2 17:39:41

start4444,我试了一下,没卡死啊,(ljx-string-translate "xx" "xxx" "xx")的结果是"xx",但我想不明白,怎么会出现你说的那种替换,逻辑上不通,oldtx="xxx"已经大于str="xx"的长度了

ljxkm 发表于 2019-8-2 17:45:55

(ljx-string-translate "小人" "大人" "asd大人小人大人")返回"asd小人小人小人"   好像也没什么不对啊

start4444 发表于 2019-8-2 17:51:25

(ljx-string-translate "大人和小人" "大人" "asd大人小人大人")你试试这个

qq1254582201 发表于 2019-8-2 19:01:31

坐等释义,希望可以打上补丁

ljxkm 发表于 2019-8-2 20:33:26

本帖最后由 ljxkm 于 2019-8-2 20:34 编辑

是出现了死循环,看样子这钱还真不好收啊,以前一直用着没什么问题,一般的使用还是没什么问题,这是几年前编的程序了,大家下载了就先用着吧,既然贴出来了,我抽时间重新写一个啊,源码也贴出给大家啊,其实也不想收什么钱,图个什么,只是觉得来论坛很长时间了,下载学到了不少东西,也得到了大家很多的帮助,自己觉得也应该做点什么,觉得好用的东西贴出来,不曾想还有那么多问题,真是没有最好只有更好啊,我自己贴的题,争取自己来解吧,现在再来写应该比这个更好哈,感谢提意见,转过来看,这对自己也是一种鞭策、提高哈。{:1_1:}
页: [1] 2
查看完整版本: 一个非常方便适用的字符串替换函数