ykklms 发表于 2003-6-7 21:44:00

新编的一个数字替换小程序,请大家指教

本帖最后由 作者 于 2003-6-7 21:44:36 编辑

;经调试可用,欢迎大家指教。
;数字替换程序,可以对选中数字进行加、减、乘、除,然后用计算后的数字替换掉原来的数字,同时可以自动去除选择集中的非数字文字
(defun invar ()
(setvar "cmdecho" 0)                        ;屏蔽命令行显示
(setq os (getvar "osmode"))                ;提取物体捕捉变量
(setvar "osmode" 0)                        ;设置物体捕捉变量为空
(setq dimzin_v (getvar "dimzin"))   ;提取dimzin 变值
(setvar "dimzin" 0)                   ;设置dimzin值为零,以防小数位数对rtos无效
(command "undo" "g")                        ;设置“U”回的值
)
(defun revar ()
(setvar "osmode" os)                        ;恢复物体捕捉设置
(setvar "dimzin" dimzin_v)                         ;恢复dimzin的值
(command "undo" "e")                        ;设置“U”的最点
(setvar "cmdecho" 1)                        ;恢复命令行显示
)
(defun process_txt (txt_ss    kword        value_bpweishu    begin_v
                  /              i                ii          n          txt_name
                  txt_datao_txt_d        o_txt_c          o_txt_v   n_txt_v
                  n_txt_c   n_txt_d
                   )
(setq        n0
        ii 0
)
(repeat (sslength txt_ss)
    (setq txt_name (ssname txt_ss ii))
    (setq txtdata (entget txt_name))
    (setq o_txt_d (assoc 1 txtdata))
    (setq o_txt_c (cdr o_txt_d))
    (setq o_txt_v (distof o_txt_c))
    (if        (and
          (/= o_txt_v nil)
          (>= o_txt_v begin_v)
        )
      (progn
        (cond
          ((= kword "+") (setq n_txt_v (+ o_txt_v value_bp)))
          ((= kword "-") (setq n_txt_v (- o_txt_v value_bp)))
          ((= kword "*") (setq n_txt_v (* o_txt_v value_bp)))
          ((= kword "/") (setq n_txt_v (/ o_txt_v value_bp)))
        )                                ;End of cond
        (setq n_txt_c (rtos n_txt_v 2 weishu))
        (setq n_txt_d (cons 1 n_txt_c))
        (setq txtdata (subst n_txt_d o_txt_d txtdata))
        (entmod txtdata)
        (setq n (1+ n))
      )                                        ;end of progn
    )                                        ;end of if
    (setq ii (1+ ii))
)                                        ;end of repeat
(prin1 "成功对")
(prin1 n)
(prin1 "个数字进行了操作!")
)                                        ;end of subprogram
(defun c:shuzth        ()
(invar)
(prompt "\n请选取数字:")
(terpri)
(setq ss_txt (ssget '((0 . "text"))))        ;选取并过滤为文字
(initget "+ - * /")
(setq        p_kword
       (getkword "\n 请输入操作码: 加(+)、减(-)、乘(*)、除(/)<+>")
)
(if (null p_kword)
    (setq P_kword "+")
)
(initget (+ 1 2))
(setq bp_value (getreal "\n 请输入加、减、乘、除数:"))
(setq wei_shu (getint "\n 请输入小数位数<2>:"))
(if (null wei_shu)
    (setq wei_shu 2)
)
(setq begin_v (getreal "\n 给定开始数<不给定>:"))
(process_txt ss_txt p_kword bp_value wei_shu begin_v)
(prompt "\n山东省水利勘测设计院 杨克坤 2003.6.6编")
(revar)
)                                        ;end of main program


[此贴子已经被作者于2003-6-7 21:33:44编辑过]

ykklms 发表于 2003-6-7 01:20:00

原程序

ykklms 发表于 2003-6-7 21:36:00

原程序有一个小BUG

原程序有一个小BUG,修改并重新上传。

ykklms 发表于 2003-6-7 21:42:00

为何传不上?

不知道为何传不上?帖子的编辑中没有附件重新上传的功能?

dwgplt 发表于 2003-6-8 10:14:00

HQ_2003 发表于 2003-6-8 12:37:00

我也碰到过类似问题“帖子的编辑中没有附件重新上传的功能“希望斑竹增加这项功能

mccad 发表于 2003-6-8 17:31:00

OK,我改改网站的程序

ykklms 发表于 2003-6-12 02:06:00

"给定开始数"的意思

“给定开始数”,的意思是小于这个数的数值不做改动。

风色之舞 发表于 2004-4-29 20:08:00

怎么不行?为什么       


        错误: 参数类型错误: lselsetp nil

岁月无身 发表于 2004-5-17 10:41:00

楼上我们是同行啊~~搞水利的


你的程序我还是没怎么吃透,说白了还是不知道怎么使用哈
页: [1] 2
查看完整版本: 新编的一个数字替换小程序,请大家指教