品茗新秀 发表于 2012-9-7 23:27:12

求一次处理表格中带负数的数字为零的LSP程序002

本帖最后由 品茗新秀 于 2012-9-8 00:02 编辑

求一次处理表格中带负数的数字为零和删除括号前面的1及括号的LSP程序002
原图



达到效果





注:改为0的数与原负值为同图层、同样式、同大小,即除了数值改为0,其它均应与原图一样。
还有后面仅删除括号前面的1及括号,其它不能改变

Andyhon 发表于 2012-9-7 23:27:13

(Defun C:test ()
   (for-sset
   (ssget "X" '((1 . "*-#*-*")))
   -#-*
   )
   (for-sset
   (ssget "X" '((1 . "*(#*x#*)")))
   #X#
   )
)

xiaodao520 发表于 2012-9-8 08:44:43

这个不需要LISP,CAD中查找替换就可以搞定的,套哥,多学学CAD基础知识,再研究编程吧。

Andyhon 发表于 2012-9-8 08:52:25

Try:

(defun -#-* (a / b c d e)
(setq b (entget a)
      c (assoc 1 b)
      d (cdr c)
      e (vl-string->list d)
      e (member 45 (cdr (member 45 e)))
      e (cons 48 e)
)

(repeat (1- (vl-string-position (ascii "-") d nil T))
    (setq e (cons 32 e))
)

(entmod (subst (cons 1 (vl-list->string e)) c b))
)

(defun #X# (a / b c d e)
(setq b (entget a)
      c (assoc 1 b)
      d (cdr c)
      e (vl-string->list d)
      e (cdr (member 40 e))
      e (reverse (cdr (member 41 (reverse e))))
)
(entmod (subst (cons 1 (vl-list->string e)) c b))
)

    ;;; (for-sset ss entdel)
    ;;; Vladimir Nesterovsky

    ;; (defun for-sset (sset fun / n)
    ;;    (if (= 'PICKSET (type sset))
    ;;      (repeat (setq n (fix (sslength sset)))
    ;;         (fun (ssname sset (setq n (1- n))))
    ;;    ) )
    ;; )

    (defun for-sset (sset func / n ename)
       (and (= 'pickset (type sset))
            (setq n -1)
            (while (setq ename (ssname sset (setq n (1+ n))))
            (func ename)
            )
       )
    )

(Defun C:test ()
   (for-sset
   (ssget "X" '((1 . "*-#*")))
   -#-*
   )
   (for-sset
   (ssget "X" '((1 . "*(#*x#*)")))
   #X#
   )
)

齐天大圣3386 发表于 2012-9-8 09:50:46

你一共才39个明经币,300个可怎么出啊?

flytoday 发表于 2012-9-8 12:51:17

上一悬赏贴楼主赖账

品茗新秀 发表于 2012-9-8 18:12:30

本帖最后由 品茗新秀 于 2012-9-8 18:13 编辑

非常强大,太好了,建议再改进一下,见下图测试











flytoday 发表于 2012-9-8 18:23:39

又想赖账了…一直改进最后说不满意

品茗新秀 发表于 2012-9-8 20:02:31

本帖最后由 品茗新秀 于 2012-9-8 20:05 编辑

十分强大,非常不错,
对了一下,不知异在何处,两个代码好象差不多,楼主能不能告诉我
页: [1]
查看完整版本: 求一次处理表格中带负数的数字为零的LSP程序002