明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: ljxkm

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

  [复制链接]
发表于 2019-8-3 09:42 | 显示全部楼层
楼主 你有没有明经版的Alisp的帮助文档啊
你方向不对啊 你这功能vlisp都有的啊
发表于 2019-8-3 10:13 | 显示全部楼层
这个能批量框选替换输入的新值吗,总不能打开代码修改了再替换吧,这样效率就没有了
发表于 2019-8-3 12:00 | 显示全部楼层
ljxkm 发表于 2019-8-2 20:33
是出现了死循环,看样子这钱还真不好收啊,以前一直用着没什么问题,一般的使用还是没什么问题,这是几年前 ...

我写了一个 不知道我的思路和你的是不是一样的 (写了一上午,写了改,改了写,都有BUG)

;;说明:字符串替换
;;参数:new:新字符串 [str]
;;参数:old:旧字符串 [str]
;;参数:str:字符串 [str]
;;返回:字符串 [str]
;;用法T-string-subst "xx" "x" "xxx")-->"xxxxxx"
(defun T-string-subst (new old str / n)
  (setq n (- (strlen new)))
    (while (setq n (vl-string-search old str (min (+ n (strlen new)) (strlen str))))
      (setq str (vl-string-subst new old str n))
    )
  str
)
 楼主| 发表于 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-3 16:35 | 显示全部楼层
ljxkm 发表于 2019-8-3 16:21
taoyi0727,我看了你那个是可以的,也比较简洁,其实问题的关键是在vl-string-subst函数的使用上,我学li ...

我也是今天早上自己写的时候才发现的  用飞诗写的 打个str就会出有关的函数,
刚开始我写的也和你差不多
后来才发现有这个 又重新改 也不太会用 不知道是从0开始还是从1开始,改来改去搞一上午,就几句话
发表于 2020-9-24 13:56 来自手机 | 显示全部楼层
挺好的,学习一下
发表于 2020-12-1 10:38 | 显示全部楼层
顶起此贴,希望继续完善,。。。。。。。。。。。。。。。
发表于 2021-6-8 08:24 | 显示全部楼层
这个可以,正好需要,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-6 10:12 , Processed in 0.306598 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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