找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 634|回复: 4

[求助] [求助]:如何过滤文字?

[复制链接]
发表于 2004-12-5 13:24:06 | 显示全部楼层 |阅读模式

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

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

×
在进行autolisp进行编写程序时,我想提取文字中的数字如“K3+510”,我想提取其中的3510,而自动过滤掉"K"和"+",如何实现这个目标呢?能不能实现这个目标呢?如果能,望兄台指点一二,举一两个例子,让小弟也学学。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-5 22:51:39 | 显示全部楼层
; By Bill Kramer----------------------------------------------------- Listing 4.4
; Useage: (String_To_Numbers "K3+150")
(defun String_To_Numbers (
                          inStr  ;;Input string
                          /
                          Res    ;;Result list
                          Buf    ;;String buffer
                          Inx      ;;Character location
                          CH     ;;Character
                          )
  (setq Inx 1 ;start at the beginning of the string
        Buf "" ;init buffer to empty
        )
  ;
  ; Loop until the end of the string.
  ; (I indicates where we are in the string)
  ;
  (while (<= Inx (strlen inStr))
    ;
    ; Get the character at position Inx, increment position indicator
    (setq CH (substr inStr Inx 1)
          Inx (1+ Inx)
          )
    ;
    (cond
      ; Test to see if character is a digit.
      ((wcmatch CH "[0-9.]")
        (if (= CH ".") ;is it decimal?
          (if (not (wcmatch Buf "*`.*")) ;not already in there
            (setq Buf (strcat Buf CH))
            (Flush_Buf))
          ;
          (setq Buf (strcat Buf CH)))
      )
      ((= Buf "") ;is the buffer empty?
               ;Is CH minus
        (if (= CH "-")
          (setq Buf CH) ;Yes, save in Buf
        )
      )
      ('T ;else buffer is not empty
        (Flush_Buf)
        (if (= CH "-")
          (setq Buf CH))
      )
    ); End of COND
  ); End of WHILE
  ;
  (if (and (/= Buf "")
           (not (wcmatch Buf "[+-.]"))
           )
    (Flush_Buf))
  (reverse Res)
)
;
; ------------------------------------------------------ Listing 4.5
;
(defun Flush_Buf ()
  (if (not (wcmatch Buf "[+-.]")) ;is it not just +-.?
    (progn
      ;Clean it up first
      (if (= (substr Buf 1 1) ".")
        (setq Buf (strcat "0" Buf))) ;;add zero to front if .#
      (if (= (substr Buf (strlen Buf)) ".")
        (setq Buf (substr Buf 1 (1- (strlen Buf))))) ;;remove decimal if #.
      ;Add to RES list
      (setq RES (cons Buf RES))))
  (setq Buf "") ;;reset Buf
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-6 11:05:31 | 显示全部楼层
楼上仁兄的程序真是不错,受教了,不过“1楼楼主”是学公路的,所以程序最后应把数字连接起来形成一个完整的数值。不过程序整体通用性好。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-6 12:40:49 | 显示全部楼层

  1. (vl-list->string
  2.   (vl-remove 'NIL
  3.              (mapcar '(lambda (X)
  4.                         (if (member
  5.                               X
  6.                               '(48 49 50 51 52 53 54 55 56 57 46)
  7.                             )
  8.                           X
  9.                         )
  10.                       )
  11.                      (vl-string->list "K3+510")
  12.              )
  13.   )
  14. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 17:30 , Processed in 0.182456 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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