cheng5276 发表于 2012-1-1 23:03:12

今天刚好在头痛这个咋写这种函数呢,嘿嘿,省事了
拜读大作

xcroy 发表于 2012-4-12 16:11:55

请问那位朋友能传我一份无痕的正则式函数啊(他的空间进不去了),
xczsb@163.com 或者发消息给我,不胜感谢!!

hvac_wh 发表于 2012-5-22 16:28:53

我觉得不在乎采用哪种语言进行编程,而是在于你设计的程序是否完整、设计的体系是否有缺陷。本案例中,我觉得还有多种情况没有考虑。如文本中含%%p、%%DC、\U+0201等。在实际使用中经常碰到,按照作者设计的程序,%%p会分解成 "%"、 “%”、“ p”,但实际上它就是一个正负号。另外对于不同的字型文件,还有作者自定义的一些特殊符合,表达特殊的含义。作者就曾经对字库文件把%%242定义为m2(平方米),这些情况可能就是编程的重点。atolisp发展到现在,功能也已经十分强大了,在AutoCAD后续高版本里,VB.NET可能不会再做主要的开发语言给予支持。但AUTOCAD不会抛弃AUtoLisp。我认为,作者提供的函数运算,就没有考虑这些情况的变化。

qq229918602 发表于 2012-5-22 20:29:47

有点复杂、、、

pop159 发表于 2012-5-22 21:49:54

zhongys 发表于 2012-5-23 01:06:40

好贴,收藏了。

阿霸99 发表于 2012-6-29 22:30:31

谢谢楼主,这个很强大,但是你的空间要密码才能进去

pimgu 发表于 2012-6-30 12:42:16

膜拜!膜拜!膜拜!

chlh_jd 发表于 2012-7-6 22:09:14

geomcal.arx的cal自带四则运算功能,使用举例如下;
批量四则运算
(vl-load-com)
;;加载geomcal.arx
(if (not(member "GEOMCAL.ARX" (mapcar (function strcase) (arx))))
    (arxload (findfile "geomcal.arx"))   
    )
(defun c:szys (/ ws ss ssen cal_str ent str x)
(prompt
    "\n计算表达式文字自身数值为变量x,形如x-0.05、(x^2-1)/2"
)
(setq ws (getint "\n请输入小数点后位数<3>"))
(if (not ws)
    (setq ws 3)
)
(prompt "\n选择需要数值运算的文字")
(setq ss (ssget (list (cons 0 "TEXT"))))
;_(svos)
(if
    (and ss
   (setq ssen (ss2lst ss nil))
   (setq ssen (vl-remove-if-not
          (function(lambda(x)
          (numberp (read (dxf 1 x)))
      )
          )
          ssen
      )
   )
    )
   (if
       (and (setq cal_str (vl-string-trim " " (LM:GetString "x-0.05")))
      (/= cal_str "")
       )
(foreach a ssen
    (setqent (entget a)
    str (dxf 1 ent)
    x   (atof str)
    )
    (if x
      (setq x (vl-catch-all-apply (function cal) (list cal_str)))
    )
    (if (vl-catch-all-error-p x)
      (princ (vl-catch-all-error-message x))
      (progn
      (setq str (rtos x 2 ws))
      (setq ent (ch-en (cons 1 str) ent))
      (entmod ent)
      )
    )
)
(princ "\n未输入表达式")
   )
   (princ "\n选择错误.")
)
;_(clos)
(princ)
)
;;;by Lee Mac
(defun LM:GetString (#Default / dcTag result)
(cond ((<= (setq dcTag (load_dialog "ACAD")) 0))
      ((not (new_dialog "acad_txtedit" dcTag)))
      (t
         (set_tile "text_edit" #Default)
         (action_tile "accept" "(setq result (get_tile \"text_edit\")) (done_dialog)")
         (action_tile "cancel" "(done_dialog)")
         (start_dialog)
         (unload_dialog dcTag)))
result)
;;;转换选择集为表
(defun ss2lst (ss vla / a e i)
(if (= (type ss) (quote PICKSET))
    (progn
      (setq i -1)
      (while (setq e (ssname ss (setq i (1+ i))))
(if vla
    (setq e (vlax-ename->vla-object e))
    nil
)
(setq a (cons e a))
      )
    )
    nil
)
)
;;索引点表值
(defun dxf (co en)
(if(eq(type en)(quote ENAME))(setq en(entget en(quote("*")))))
(if(vl-consp co)(mapcar (function (lambda (x)(cdr (assoc x en))))co)
    (cdr (assoc co en))))
;;点表替换
(defun ch-en (co en /)
(if (eq (type en) (quote ename))
    (setq en (entget en (list "*")))
)
(if (assoc (car co) en)
    (subst co (assoc (car co) en) en)
    (reverse (cons co (reverse en)))
)
)

freeok 发表于 2012-11-16 21:58:53

大师 之作,看不懂。。
页: 1 2 [3] 4
查看完整版本: !强! 在lisp中应用正则表达式