乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: samifox

[编程交流] 替换文字(无vlisp)

[复制链接]

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-6 00:04:09 | 显示全部楼层
 
这样地:
 
  1. (defun C:test (/ str owrd nwrd i w fst lst)
  2. (setq str (getstring T "\nPlease type your sentense:\n"))
  3. (setq owrd (getstring T "\nType the word you want to replace\n"))
  4. (setq nwrd (getstring T "\nType the word you want to replace with\n"))
  5. (if (wcmatch str (strcat "*" owrd "*"))
  6.    (progn
  7.      (setq i 0)
  8.      (setq w "")
  9.      
  10.      (while (not (equal w owrd))
  11. (setq i (+ i 1))
  12. (setq w (substr str i (strlen owrd)));_search for the old word
  13.      )
  14.   (setq fst (substr str 1 (- i 1)))
  15.   (setq        lst (substr str
  16.                     (+ i (strlen owrd))
  17.                     (- (strlen str)  (strlen owrd))
  18.             )
  19.   )
  20.   (princ (strcat fst nwrd lst))
  21.   (setq w nil) ;_cuz while stop
  22. ) ;_progn if yes
  23.    (princ "\nMatch not found\n")
  24.    
  25. )
  26. (princ)
  27. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 00:06:49 | 显示全部楼层
较好的我在考虑运行一个循环来包含目标字符串的多个实例
 
试试这个:
  1. (Defun c:repstr ( / _valid str owrd nwrd str nstr)
  2. ;;                pBe013March2014                ;;;
  3. (defun _valid (msg / a)
  4. (setq a (getstring T msg))
  5.         (if (snvalid a) a (prompt "\n<<<Invalid String>>>")))
  6. (and
  7.   (setq str (_valid "\nPlease type your sentense: "))
  8.   (setq owrd (_valid "\nType the word you want to replace: "))
  9.   (setq nwrd (_valid "\nType the word you want to replace with: "))
  10.         (while (wcmatch str (strcat "*" owrd "*"))
  11.           (setq        i    0
  12.                 nstr str
  13.                 l    (strlen owrd)
  14.           )
  15.                 (While (eq str nstr)
  16.                   (if (eq owrd (substr str (setq i (1+ i)) l))
  17.                     (setq nstr (strcat (substr str 1 (setq n (1- i)))
  18.                                        nwrd
  19.                                        (substr str (+ n l 1))
  20.                                )
  21.                     )
  22.                   )
  23.                 )
  24.           (setq str nstr)
  25.         )
  26.   (print str)
  27. )
  28. (princ)
  29. )
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 00:11:56 | 显示全部楼层
我的方法(如果不使用VL):
  1. (defun str-subst-all (new old string / search return)
  2. (setq search (strcat old "*") return "")
  3. (while (not (eq string ""))
  4.    (if (wcmatch string search)
  5.      (setq string (substr string (1+ (strlen old))) return (strcat return new))
  6.      (setq return (strcat return (substr string 1 1)) string (substr string 2))))
  7. return)
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 00:13:35 | 显示全部楼层
或者更优化一点,并结合类似于VL方法的内容:
[code](从(找到/len1 len2的模式字符串)中定义str位置)(if(wcmatch string(strcat“*”pattern“*”)(progn(setq len1(strlen模式)len2(strlen字符串)模式(strcat模式“*”))(while(和(未找到)(
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 00:18:00 | 显示全部楼层
 
要么你的库中已经有了这些代码,要么你手头有太多的时间
 
很好的vl复制功能
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 00:23:44 | 显示全部楼层
o: )其中一些我已经有了,例如看课文。此处为lsp文件:http://sourceforge.net/p/caddons/code/HEAD/tree/Libraries/ 
13号帖子中的一个问题是我在之前的帖子中提出的,虽然我记不清具体在哪里,但谷歌似乎帮不上什么忙。#14中的一个是一个快速重写,大约15分钟的编码和测试-我在发布#13后写的。
 
至于vl模仿者。。。在我看来,重新发明轮子不是一个好做法。如果已经有一个类似的函数,那么您的函数应该尝试遵循相同的参数和顺序(至少从外部看是这样)。否则,您的函数的用户会发现不一致,并且在使用您的函数时,他们对其他函数的了解变得无用。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 00:25:05 | 显示全部楼层
 
的确
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:12 , Processed in 0.418089 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表