明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 715|回复: 5

分享一个字符串左剪切和右剪切的函数

  [复制链接]
发表于 2025-2-25 09:29:13 | 显示全部楼层 |阅读模式
本帖最后由 hubeiwdlue 于 2025-2-25 09:31 编辑
  1. (defun wdl_str->lst (string strkey / po strlst xlen)
  2.   (setq xlen (1+ (strlen strkey)))
  3.   (while (setq po (vl-string-search strkey string))
  4.     (setq strlst (cons (substr string 1 po) strlst))
  5.     (setq string (substr string (+ po xlen)))
  6.   )
  7.   (vl-remove "" (reverse (cons string strlst)))
  8. )
  9. ;剪切字符串保留左侧部分字符串
  10. ;srting,被剪切字符串,dstr,剪切字符,flag控制参数,t返回值不删除dstr本身,nil返回值删除dstr本身
  11. (defun str-left-trim(string dstr flag / newstr1 newstr2 strlst strlst1)
  12.   (setq strlst (wdl_str->lst string dstr))
  13.   (setq strlst1 (reverse(cdr(reverse strlst))))
  14.   (setq newstr1 (apply 'strcat (mapcar '(lambda (x) (strcat x dstr)) strlst1)))
  15.   (setq newstr2 (substr newstr1 1 (- (strlen newstr1) (strlen dstr))))
  16.   (if flag
  17.     newstr1
  18.     newstr2
  19.   )
  20. )
  21. ;剪切字符串保留右侧部分字符串
  22. ;srting,被剪切字符串,dstr,剪切字符,flag控制参数,t返回值不删除dstr本身,nil返回值删除dstr本身
  23. (defun str-right-trim(string dstr flag / newstr1 newstr2 strlst strlst1)
  24.   (setq strlst (wdl_str->lst string dstr))
  25.   (setq strlst1 (cdr strlst))
  26.   (setq newstr1 (apply 'strcat (mapcar '(lambda (x) (strcat dstr x)) strlst1)))
  27.   (setq newstr2 (substr newstr1 (1+ (strlen dstr)) (strlen newstr1)))
  28.   (if flag
  29.     newstr1
  30.     newstr2
  31.   )
  32. )
  33. (str-left-trim "祖//国//万//岁" "//" t);"祖//国//万//"
  34. (str-left-trim "祖//国//万//岁" "//" nil);"祖//国//万"


评分

参与人数 2明经币 +2 收起 理由
magicheno + 1 很给力!
tryhi + 1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2025-2-26 20:15:14 | 显示全部楼层
yjwht 发表于 2025-2-26 19:55
(vl-remove "" (reverse (cons string strlst))); 删除空字符串,两个分隔符之间无字符时出现空字符串!
...

谢谢您提的建议,确实可以不要,默认就是到字符串末尾。上面那个函数是我从论坛收集得,我的理解,这个函数常用的一个场景是按行读取txt文本文档,按字符按空格分开成表,可能有多个空格,清理一下空格,可以防止出现空字符串导致出问题。如果不读取文本,不清理也没问题。
回复 支持 1 反对 0

使用道具 举报

发表于 2025-2-26 10:50:09 | 显示全部楼层
感谢楼主分享,去试试了
回复 支持 反对

使用道具 举报

发表于 2025-2-26 16:34:59 | 显示全部楼层
刚领会一点。第一段代码的功能是将一个字符串按照指定的分隔键分割成一个字符串列表,并去除列表中的空字符串,如下:
(wdl_str->lst "apple,banana,orange" ",")
("apple" "banana" "orange")
回复 支持 反对

使用道具 举报

发表于 2025-2-26 19:55:59 | 显示全部楼层
本帖最后由 yjwht 于 2025-2-26 20:06 编辑

(vl-remove "" (reverse (cons string strlst))); 删除空字符串,两个分隔符之间无字符时出现空字符串!
提点小建议,删除框内部分更精简些:

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-2-27 00:16:02 | 显示全部楼层
感谢大佬分享
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-12 09:06 , Processed in 0.168182 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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