找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1618|回复: 2

[LISP函数]:几个字符串处理函数,请大家提意见

[复制链接]

已领礼包: 58个

财富等级: 招财进宝

发表于 2007-12-14 08:22:43 | 显示全部楼层 |阅读模式

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

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

×
;;;;提取字串中的数字,lst ( "+" ".") 需要当作数字处理的符号
(defun zgx-find-num (str lst / rtn-str rtn-str1 lst) ;rtn-str)
    (setq rtn-str ""
          rtn-str1 ""
          lst nil
    )
    (while (/= str "")
        (if (zgx-singlestr-if-num (zgx-substr str 1 1) lst)
            (progn
                (setq rtn-str (strcat rtn-str (zgx-substr str 1 1))
                      str     (zgx-substr str 2 0)
                )
                (while (zgx-singlestr-if-num (zgx-substr str 1 1) lst)
                    (setq rtn-str (strcat rtn-str
                                          (zgx-substr str 1 1)
                                  )
                          str          (zgx-substr str 2 0)
                    )
                )
                (setq lst (append lst (list rtn-str)))
                (setq rtn-str "")
            )
            (progn
                (setq rtn-str1 (zgx-substr str 1 1)
                      str      (zgx-substr str 2 0)
                )
                (while
                    (and
                        (not (zgx-singlestr-if-num (zgx-substr str 1 1)
                                                   lst
                             )
                        )
                        (/= str "")
                    )
                       (setq rtn-str1 (strcat rtn-str1
                                              (zgx-substr str 1 1)
                                      )
                             str      (zgx-substr str 2 0)
                       )
                )
                (setq lst (append lst (list rtn-str1)))
                (setq rtn-str1 "")
            )
        )
    )
    lst
)
;;-----判断是否为英文字符----------------
(defun zgx-singlestr-if-letter (str)
    (if        (wcmatch str (strcat str "*"))
        t
        nil
    )
)
;;;-----判断单个字母是否为数字,lst ( "+" ".") 需要当作数字处理的符号------
(defun zgx-singlestr-if-num (str lst)
    (if        (or
            (wcmatch str "#")
            (member str lst)
        )
        t
        nil
    )
)
;;;---判断整个单词是否为数字,lst ( "+" ".") 需要当作数字处理的符号----------
(defun zgx-wholestr-if-num (str lst / yes)
    (setq yes t)
    (while (and
               (/= "" str)
               yes
           )
        (if (zgx-singlestr-if-num (zgx-substr str 1 1) lst)
            (setq str (zgx-substr str 2 1))
            (setq yes nil)
        )
    )
    yes
)
;;------字符串长度,汉字按一个字符计算------------------
(defun zgx-strlen (str / m n)
    (setq m 0)
    (while (/= str "")
        (if (zgx-singlestr-if-letter (substr str 1 1))
            (setq n 1)
            (setq n 2)
        )
        (setq str (substr str (+ 1 n)))
        (setq m (1+ m))
    )
    m
)
;;-------取代substr,汉字按一个字符计算,n<0 则substr str m,否则substr m n-----------------
(defun zgx-substr (str m n / mm nn teststr kk str1)
    (if        (= m 0)
        (setq str1 str)
        (progn
            (setq mm 0
                  nn 0
            )
            (repeat (- m 1)
                (if (and
                        str
                        (/= "" str)
                    )
                    (progn
                        (setq teststr (substr str 1 1))
                        (if (zgx-singlestr-if-letter teststr)
                            (setq kk 1)
                            (setq kk 2)
                        )
                        (setq mm (+ mm kk))
                        (setq str (substr str (1+ kk)))
                    )
                )
            )
            (setq str1 str)
            (repeat n
                (if (and
                        str
                        (/= "" str)
                    )
                    (progn
                        (setq teststr (substr str 1 1))
                        (if (zgx-singlestr-if-letter teststr)
                            (setq kk 1)
                            (setq kk 2)
                        )
                        (setq nn (+ nn kk))
                        (setq str (substr str (1+ kk)))
                    )
                )
            )
            (if        (> n 0)
                (substr str1 1 nn)
                (substr str1 1)
            )

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

已领礼包: 3191个

财富等级: 富可敌国

发表于 2009-10-22 16:18:16 | 显示全部楼层
好,有实力。下载学习你的经验
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

发表于 2014-9-1 20:19:14 | 显示全部楼层
正好用到,感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 14:10 , Processed in 0.426547 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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