明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2400|回复: 18

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

  [复制链接]
发表于 2019-8-2 12:21 | 显示全部楼层 |阅读模式
本帖最后由 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

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-8-2 12:25 | 显示全部楼层
这是个啥   你总要发个用法  怎么个个替换方式噻
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2019-8-3 13:08 | 显示全部楼层
本帖最后由 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
 楼主| 发表于 2019-8-3 16:21 | 显示全部楼层
taoyi0727 发表于 2019-8-3 12:00
我写了一个 不知道我的思路和你的是不是一样的 (写了一上午,写了改,改了写,都有BUG)

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

taoyi0727,我看了你那个是可以的,也比较简洁,其实问题的关键是在vl-string-subst函数的使用上,我学lisp是铁道出版社的AutoLisp学习导引及配套那本函数帮助,当时不知有没有明经通道这样的论坛,上面的这个函数的帮助说明好像都是“in”替换“to”这样的,当时一点一点的试,就认为只能替换一样长度的,还在书上注明,故才绕了那么大个圈,去写这个函数,我后来贴上去这个函数也没有用到vl-string-subst,大家一讨论,你的那个程序一写,我一试,再看看wen1235说的,明白了,这些地方不晒晒,恐怕永远发现不了啊,Lisp特别是vLisp函数,那么多,要全部整明白用的精,也不可能吧,所以学习交流很有必要哈。
 楼主| 发表于 2019-8-2 12:28 | 显示全部楼层
  taoyi0727:  (ljx-string-translate "xx" "a" "123xxjkhxx") 返回""123ajkha""、
                     (ljx-string-translate "xx" "" "123xxjkhxx")返回"123jkh"
                    就是用法啊
 楼主| 发表于 2019-8-2 12:35 | 显示全部楼层
不好意思啊,我是想附件收费,搞成主题收费了,这一下就看得见了
发表于 2019-8-2 15:56 | 显示全部楼层
发现问题:  (ljx-string-translate "xx" "xxx" "xx") 当替换字符包含原来字符的时候会卡死不动
 楼主| 发表于 2019-8-2 17:39 | 显示全部楼层
start4444,我试了一下,没卡死啊,(ljx-string-translate "xx" "xxx" "xx")的结果是"xx",但我想不明白,怎么会出现你说的那种替换,逻辑上不通,oldtx="xxx"已经大于str="xx"的长度了
 楼主| 发表于 2019-8-2 17:45 | 显示全部楼层
(ljx-string-translate "小人" "大人" "asd大人小人大人")返回"asd小人小人小人"   好像也没什么不对啊
发表于 2019-8-2 17:51 | 显示全部楼层
(ljx-string-translate "大人和小人" "大人" "asd大人小人大人")  你试试这个
发表于 2019-8-2 19:01 | 显示全部楼层
坐等释义,希望可以打上补丁
 楼主| 发表于 2019-8-2 20:33 | 显示全部楼层
本帖最后由 ljxkm 于 2019-8-2 20:34 编辑

是出现了死循环,看样子这钱还真不好收啊,以前一直用着没什么问题,一般的使用还是没什么问题,这是几年前编的程序了,大家下载了就先用着吧,既然贴出来了,我抽时间重新写一个啊,源码也贴出给大家啊,其实也不想收什么钱,图个什么,只是觉得来论坛很长时间了,下载学到了不少东西,也得到了大家很多的帮助,自己觉得也应该做点什么,觉得好用的东西贴出来,不曾想还有那么多问题,真是没有最好只有更好啊,我自己贴的题,争取自己来解吧,现在再来写应该比这个更好哈,感谢提意见,转过来看,这对自己也是一种鞭策、提高哈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-6 11:19 , Processed in 2.031301 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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