本帖最后由 自贡黄明儒 于 2013-6-24 15:29 编辑
yoyoho 发表于 2013-6-24 15:11
; 错误: no function definition: SA_CHANGE
- ;;练习正则表达式,文字最后数字加1
- (defun C:w1 (/ ENT I REGEX S STR STR1 STR2)
- (setq ent (car (entsel))) ;选择文字
- (setq regex (vlax-create-object "Vbscript.RegExp")) ;引用正则表达式控件
- ;;(vlax-put-property regex "IgnoreCase" 0) ; 不忽略大小写
- ;;(vlax-put-property regex "Global" 0) ;只匹配第一处
- ;;(vlax-put-property regex "RightToLeft") ;从右向左查找(语法不对)
- (setq str (cdr (assoc 1 (entget ent)))) ;文本内容
- (vlax-put-property regex "Pattern" "[0-9]+$") ;查找规则,提最后一位数字;"[0-9]+$"最后数字
- (setq s (vlax-invoke-method regex "Execute" str)) ;将规则运用到STR字符,得到提取出的文字内容
- (VLAX-FOR tmp s
- (setq str1 (cons (vlax-get-property tmp "value") str1))
- ) ;将内容转换为LISP语言就可以直接观察了
- (if str1
- (progn (setq str2 (itoa (1+ (atoi (car str1))))) ;提取的尾数+1
- (setq i (- (strlen (car str1)) (strlen str2)))
- (if (> i 0)
- (repeat i (setq str2 (strcat "0" str2)))
- )
- ;;(setq s (vlax-invoke-method regex "Replace" str "")) ;字符串前缀
- (setq str (vlax-invoke-method regex "Replace" str str2)) ;替换字符串
- )
- (setq str (strcat str "1"))
- )
- (vlax-put-property (vlax-ename->vla-object ent) 'TextString str) ;改变特性
- (vlax-release-object regex) ;释放正则表达式
- (princ)
- )
- ;;小数点后数字加1
- (defun C:w2 (/ ENT ENTLIST I QIANZ STR STR1 STR2 STRLEN1 STRLEN2)
- (setq ent (car (entsel))) ;选择文字
- (setq entlist (entget ent))
- (setq str (cdr (assoc 1 entlist))) ;文本内容
- (setq strlen1 (strlen str)) ;长度
- (setq QianZ (vl-string-right-trim "0123456789" str)) ;去除右边数字
- (setq strlen2 (strlen QianZ)) ;前缀长度
- (setq str1 (substr str (1+ strlen2) (- strlen1 strlen2))) ;小数点后数字
- (if str1
- (progn (setq str2 (itoa (1+ (atoi str1)))) ;提取的尾数+1
- (setq i (- (strlen str1) (strlen str2)))
- (if (> i 0)
- (repeat i (setq str2 (strcat "0" str2)))
- )
- )
- (setq str2 "1")
- )
- (setq str (strcat QianZ str2))
- (entmod (subst (cons 1 str) (assoc 1 entlist) entlist))
- (princ)
- )
|