找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1003|回复: 0

[LISP函数]:单字符关键字立刻响应

[复制链接]
发表于 2009-9-16 18:22:08 | 显示全部楼层 |阅读模式

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

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

×
(defun Autostr (cap / lst rtn str1 str2)
  ;;CAP为1时,全部转为小写,为2时,转为大写,为其它时,不做转换
  ;;可接受的字符为
  (setq lst (grread))
  (setq str1 (car lst))
  (while (/= str1 2)
    (setq lst (grread))
    (setq str1 (car lst))
  )
  (setq str2 (cadr lst))
  (while (not (or (and (<= str2 57) (>= str2 48))
                  (and (<= str2 90) (>= str2 65))
                  (and (<= str2 122) (>= str2 97))
                  (= str2 32)
                  (= str2 13)
              )
         )
    (setq lst (grread))
    (setq str1 (car lst))
    (while (/= str1 2)
      (setq lst (grread))
      (setq str1 (car lst))
    )
    (setq str2 (cadr lst))
  )
  (setq rtn (chr str2))
  (if (= cap 1)
    (setq rtn (strcase rtn t))
  )
  (if (= cap 2)
    (setq rtn (strcase rtn))
  )
  rtn
)
(defun Initget_ex (str / lst nn)
;;;定义关键字函数,只能接受/返回单字符
;;;并且加入了空格与回车
  (setq lst '())
  (setq nn 1)
  (repeat (strlen str)
    (if        (/= (substr str nn 1) " ")
      (setq lst (cons (substr str nn 1) lst))
    )
    (setq nn (1+ nn))
  )
  (setq lst (cons " " lst))
  ;;空格
  (setq lst (cons "\r" lst))
  ;;回车
  (setq rtn_initget_ex (reverse lst))
  rtn_initget_ex
)
(defun Cap2Lit (str cap / rtn nn lst)
;;;字符大小写转换cap为1时,全部转为小写,为2时全部转为大写,此函数可以接受字符串或字符串列表

  (if (= (type str) 'STR)
    (progn
      (if (= cap 1)
        (setq rtn (strcase str T))
      )
      (if (= cap 2)
        (setq rtn (strcase str))
      )
    )
  )
  (if (= (type str) 'LIST)

    (progn
      (if (= cap 1)
        (setq cap T)
        (setq cap nil)
      )
      (setq nn 0)
      (setq lst '())
      (repeat (length str)
        (setq lst (cons (strcase (nth nn str) cap) lst))
        (setq nn (1+ nn))
      )
      (setq rtn (reverse lst))
    )
  )
  rtn
)

(defun Getkword_ex (/ rtn lst1)
;;;;获取关键字
  (setq lst1 (cap2lit rtn_initget_ex 2))
;;;取得initget_ex返回的值
  (setq rtn (autostr 2))
  (while (null (member rtn lst1))
    (setq rtn (autostr 2))
  )
  rtn
)



使用方法:
(defun c:tt(/ str)
  (prompt "\n打印字符串:<a>打印A | b 打印B | c:打印C")
  (initget_ex  "abc");;;定义能接受的字符
  (setq str (getkword_ex))
  (if (or (= str " ") (= str "\r"))
    (setq str "A")
    )
  (if (= str "A")
    (alert "a")
    (if (= str "B")
      (alert "B")
      (alert "c")
      )
    )
  (prin1)
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-20 16:49 , Processed in 0.177694 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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