自贡黄明儒 发表于 2021-2-18 14:13:09

不用回车的KeyWord

;;(MyKeyWord "对齐[左(Z)/右(Y)]<Z>:")
(defun MyKeyWord (str / CODE FLAG RETURN STR1 STR2)
(princ (strcat "\n " str))
(setq str1 (xd::string:regexps "[\(].[\)]" str ""))
(setq str1(mapcar '(lambda(x) (xd::string:regexps "[^\(|\)]" x "")) str1))
(setq str1(apply 'strcat (mapcar 'car str1)))
(setq str2 (xd::string:regexps "[\<].[\>]" str ""))
(setq str2 (xd::string:regexps "[^\<|\>]" (car str2) ""))
(setq str1 (strcat (strcase str1 nil) (strcase str1 t) " "))
(setq str1 (VL-STRING->LIST str1))
(while (not Flag)
    (setq code (grread T 8))
    (setq Flag (member (cadr code) str1))
)
(if (= (type Flag) 'LIST)
    (setq return (strcase (VL-LIST->STRING (list (car Flag))) nil))
)
(if (= return " ")
    (setq return (car str2))
)
return
)

hf423 发表于 2022-5-17 14:34:44

试一下这个,不记得原作者是谁了,应该是来源于本论坛。

;;;(Get_Key_Word "\n1实体/2钢筋砼/3素砼/4墙体/5阳台/6卫生间/7厨房:<1>"'("1" "2" "3" "4" "5" "6" "7") "1")
(defun Get_Key_Word(pro lst def / kw val)
(setq lst (apply 'append (mapcar '(lambda(e) (list (ascii (strcase e)) (ascii (strcase e T)))) lst)) def (ascii def))
(prompt pro)
(while (not (and (setq kw (grread nil) val (car kw) kw (cadr kw)) (member val '(2 11 25))
                   (if (or (= val 25) (and (= val 11) (= kw 0)) (member kw '(13 32))) (setq kw def) (member kw lst)))))
(strcase (vl-list->string (list kw))))

小菜123 发表于 2021-2-19 16:11:48

本帖最后由 小菜123 于 2021-2-19 16:13 编辑


;|
功能 对字符串进行正则表达式匹配测试.
参数:
pat = 正则表达式模式 ,对应vbs正则表达式的模式(expression)。说明: \\号要用\\\\替代.
str = 字符串
key = \"i\" \"g\" \"m\" , \"i\"不区分大小写(Ignorecase),\"g\"全局匹配(Global).
         \"m\"多行模式(Multiline),以上几个关键字可以组合使用,或用 \"\".
返回: 返回匹配的字符列表,或无一匹配返回nil

|;
(defun XD::String:RegExpS (pat str key / end keys matches x)
(if (not *xxvbsexp)
    (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
)
(vlax-put *xxvbsexp 'Pattern pat)
(if (not key)
    (setq key "")
)
(setq key (strcase key))
(setq keys '(("I" "IgnoreCase") ("G" "Global")
         ("M" "Multiline")
      )
)
(mapcar
    '(lambda (x)
       (if (wcmatch key (strcat "*" (car x) "*"))
         (vlax-put *xxvbsexp (read (cadr x)) 0)
         (vlax-put *xxvbsexp (read (cadr x)) -1)
       )
   )
    keys
)
(setq matches (vlax-invoke *xxvbsexp 'Execute str))
(vlax-for x matches (setq end (cons (vla-get-value x) end)))
(reverse end)
)

zixuan203344 发表于 2021-2-19 08:02:11

黄大师还是按照自己的想法写完了,厉害厉害

andyzha 发表于 2021-2-19 08:45:53

黄大师,求一个快速对齐的lisp,实现的功能就是选择一个对象,直线或者块,再点选该对象中的一条直线,然后选中要对齐的线就直接对齐到此线段了。

明经里有不少这样的lisp,但是都不太完善,求大师指点,多多谢谢,前排占座等候

paulpipi 发表于 2021-2-19 10:10:27

xyp1964 发表于 2021-2-19 12:21:48

缺少xd::string:regexps函数

yoyoho 发表于 2021-2-19 17:59:23

谢谢! 黄大师分享学习!!!!!

Qwer1243 发表于 2021-2-22 09:07:48

学习啦......................

tigcat 发表于 2021-2-24 14:42:06

小菜123 发表于 2021-2-19 16:11


有了菜总的代码,省去了装晓东工具箱。

20060510412 发表于 2022-5-17 13:53:30

很方便,多谢黄大师热心分享
页: [1] 2
查看完整版本: 不用回车的KeyWord