找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 991|回复: 2

[分享]:最近关于字符处理的问题很多,写了几个:

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-7-9 22:18:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
其实xd-api应该可以应付,大家尽量用api
不用的 下面.

写了和api相同的几个函数  vlisp下用


  1. ;相当xdrx_txtsrch
  2. ;出现的位置
  3. ;(str-search "12341234123456""12")-->(1 5 9)
  4. (defun str-search(fa-str str / a len li no)
  5. (setq len(strlen str)a 0)
  6. (while(setq no(vl-string-search str fa-str a))
  7.        (setq li(cons no li) a(+ len no))
  8. )(mapcar '1+ (reverse li))
  9. )


  10. ;相当xdrx_string_tok
  11. ;how为t时,去掉分割的字符 ,how为nil是保留
  12. ;(str-cut "1234534""67" t)-->("1234534")
  13. ;(str-cut "1234534""3" t)-->("12" "45" "4")
  14. ;(str-cut "1234534""3" nil)-->("12" "3" "45" "3" "4")
  15. ;(str-cut "ab  12  3 4534" " " t)-->("ab" "12" "3" "4534")

  16. (defun str-cut (fa-str str how / len li no)
  17.   (setq  len (strlen str)
  18.   )
  19.   (while (setq no (vl-string-search str fa-str))
  20.     (if (/= no 0)
  21.       (setq li (cons (substr fa-str 1 no) li))
  22.     )
  23.     (setq li (cons (substr fa-str (1+ no) len) li)
  24.           fa-str (substr fa-str (+ no len 1))
  25.     )
  26.   )
  27.   (if (/= "" fa-str)
  28.     (setq li (cons fa-str li))
  29.   )
  30.   (if how
  31.     (vl-remove str (reverse li))
  32.     (reverse li)
  33.   )
  34. )


  35. ;相当xdrx_string_replace  
  36. ;文字替换
  37. ;(STR-REPLACE "123456123456" "34""abc")-->"12abc5612abc56"
  38. (defun str-replace(str old new)
  39.   (while(vl-string-search old str)(setq str(vl-string-subst new old str)))
  40.   str
  41. )




比如:
yytt的问题
(str-cut "WF2 496.96 497.90 0.94" " " t) -->("WF2" "496.96" "497.90" "0.94")

有问题,大家请说话.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-10 01:01:15 | 显示全部楼层

  1. (defun string_parse (str delimiter / post strlst)
  2.   (setq strlst '())
  3.   (while (vl-string-search delimiter str)
  4.     (setq post (vl-string-search delimiter str))
  5.     (setq strlst (append strlst (list (substr str 1 post))))
  6.     (setq str (substr str (+ post 2)))
  7.   )
  8.   (vl-remove "" (append strlst (list str)))
  9. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2003-7-13 09:21:00 | 显示全部楼层
最初由 eachy 发布

(defun string_parse (str delimiter / post strlst)
  (setq strlst '())
  (while (vl-string-search delimiter str)
    (setq post (vl-string-search delimiter str))
    (setq strlst (append st... [/B]


其实功能是不同的.一个字符分!
(STRING_PARSE "123123123""23")-->("1" "31" "31" "3")
而(str-cut  "123123123""23"t)-->("1" "1" "1").



再来:

  1. ;补足小数,最后位为数字或点.
  2. ;(EXTENDSTR1 "34"3)-->"34.000"
  3. ;(EXTENDSTR1 "34.1"3)-->"34.100"
  4. ;(EXTENDSTR1 "34.1a"3)-->"34.1a"
  5. (defun extendstr1(str len / no num)
  6. (if(wcmatch str "*#,*#`.")
  7.    (progn
  8.     (setq no(vl-string-search "." str))
  9.     (if no(setq num(- len(- (strlen str) no 1)))
  10.           (setq num len str(strcat str"."))
  11.      )
  12.     (if(> num 0)(repeat num(setq str(strcat str "0"))))
  13. ))
  14. str
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 12:58 , Processed in 0.206870 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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