lisp吧 关注:2,681贴子:12,837
  • 1回复贴,共1

基于cad字符功能lisp函数的练习

只看楼主收藏回复

在明经论坛中遇到了处理字符串的麻烦:
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=191314&page=1#pid996926
所以开始研究lisp中的部分字符串功能,期望能组成一个完整的整体,来完成我的问题。
我决定先做一些联系,完成查找、替换,表格元素替换的小函数,然后组成一个完整的函数,解决字符串处理的问题。三天打鱼两天晒网,我也不晓得什么时候能完成。明经论坛,我暂时还不能发帖,先立贴在此,等我会员升上去,再把,思路整理,分享给和我一样的初学者,期盼大家少走我的弯路。
;实现字符串全局查找位置功能
(defun myfind(source target start)
(if (null start) (setq start 0))
(if (or(not source) (not target)) (princ "目标字符或查询字符未定义"))
(if (or (< start 0)(> start (strlen source)))(princ "起始查询位置超过界限"))
(setq n_index 0)
(setq lstso (vl-string->list source))
(setq lstta (vl-string->list target))
(setq t_index 0)
(foreach n lstso
(if (=(nth n_index lstso) (nth t_index lstta))
(progn
(setq t_index (1+ t_index))
(if (= t_index (strlen target))(and (princ (+(- n_index (strlen target)) 1))(princ" ")));没选择回车,会找不到答案,用空格做连接,可以在同一行看答案
)
(setq t_index 0)
)
(setq n_index (1+ n_index))
(princ)
)
)
;序数n和序数t的对应值相同时,检查序数t长度与目标相同,则输出目标位置
;序数对应值不相同时,序数t值归零,避免t与n匹配错位
;序数n计数随序列增加
;字符串解决不了的事情,就交给能解决的其他格式处理


IP属地:湖南1楼2024-10-14 08:32回复
    ;目前修改成这个样子
    ;实现字符串查找位置功能
    (defun myfind(source target / pos0 pos lstpos )
    ;(setq source "121212121212")
    ;(setq target "1")
    (setq pos0 0)
    ;(setq pos 0)
    ;(setq lstpos '())
    (while (setq pos(vl-string-search target source))
    (setq pos0 (+ pos (strlen(substr source (+ pos (strlen target)) 1 )) pos0))
    (setq source (substr source (+ 1 pos (strlen target))))
    (setq lstpos (cons (- pos0 1) lstpos))
    ):while
    );defun


    IP属地:湖南2楼2024-10-19 15:49
    回复