明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 无痕

!强! 在lisp中应用正则表达式

    [复制链接]
发表于 2012-1-1 23:03 | 显示全部楼层
今天刚好在头痛这个咋写这种函数呢,嘿嘿,省事了
拜读大作
发表于 2012-4-12 16:11 | 显示全部楼层
请问那位朋友能传我一份无痕的正则式函数啊(他的空间进不去了),
xczsb@163.com 或者发消息给我,不胜感谢!!
发表于 2012-5-22 16:28 | 显示全部楼层
我觉得不在乎采用哪种语言进行编程,而是在于你设计的程序是否完整、设计的体系是否有缺陷。本案例中,我觉得还有多种情况没有考虑。如文本中含%%p、%%DC、\U+0201等。在实际使用中经常碰到,按照作者设计的程序,%%p会分解成 "%"、 “%”、“ p”,但实际上它就是一个正负号。另外对于不同的字型文件,还有作者自定义的一些特殊符合,表达特殊的含义。作者就曾经对字库文件把%%242定义为m2(平方米),这些情况可能就是编程的重点。atolisp发展到现在,功能也已经十分强大了,在AutoCAD后续高版本里,VB.NET可能不会再做主要的开发语言给予支持。但AUTOCAD不会抛弃AUtoLisp。我认为,作者提供的函数运算,就没有考虑这些情况的变化。
发表于 2012-5-22 20:29 | 显示全部楼层
有点复杂、、、
发表于 2012-5-22 21:49 | 显示全部楼层
发表于 2012-5-23 01:06 | 显示全部楼层
好贴,收藏了。
发表于 2012-6-29 22:30 | 显示全部楼层
谢谢楼主,这个很强大,但是你的空间要密码才能进去
发表于 2012-6-30 12:42 | 显示全部楼层
膜拜!膜拜!膜拜!
发表于 2012-7-6 22:09 | 显示全部楼层
geomcal.arx的cal自带四则运算功能,使用举例如下;
批量四则运算
  1. (vl-load-com)
  2. ;;加载geomcal.arx
  3. (if (not(member "GEOMCAL.ARX" (mapcar (function strcase) (arx))))
  4.     (arxload (findfile "geomcal.arx"))   
  5.     )
  6. (defun c:szys (/ ws ss ssen cal_str ent str x)
  7.   (prompt
  8.     "\n计算表达式文字自身数值为变量x,形如x-0.05、(x^2-1)/2"
  9.   )
  10.   (setq ws (getint "\n请输入小数点后位数<3>"))
  11.   (if (not ws)
  12.     (setq ws 3)
  13.   )
  14.   (prompt "\n选择需要数值运算的文字")
  15.   (setq ss (ssget (list (cons 0 "TEXT"))))
  16.   ;_(svos)
  17.   (if
  18.     (and ss
  19.    (setq ssen (ss2lst ss nil))
  20.    (setq ssen (vl-remove-if-not
  21.           (function  (lambda  (x)
  22.           (numberp (read (dxf 1 x)))
  23.         )
  24.           )
  25.           ssen
  26.         )
  27.    )
  28.     )
  29.      (if
  30.        (and (setq cal_str (vl-string-trim " " (LM:GetString "x-0.05")))
  31.       (/= cal_str "")
  32.        )
  33.   (foreach a ssen
  34.     (setq  ent (entget a)
  35.     str (dxf 1 ent)
  36.     x   (atof str)
  37.     )
  38.     (if x
  39.       (setq x (vl-catch-all-apply (function cal) (list cal_str)))
  40.     )
  41.     (if (vl-catch-all-error-p x)
  42.       (princ (vl-catch-all-error-message x))
  43.       (progn
  44.         (setq str (rtos x 2 ws))
  45.         (setq ent (ch-en (cons 1 str) ent))
  46.         (entmod ent)
  47.       )
  48.     )
  49.   )
  50.   (princ "\n未输入表达式")
  51.      )
  52.      (princ "\n选择错误.")
  53.   )
  54.   ;_(clos)
  55.   (princ)
  56. )
  57. ;;;by Lee Mac
  58. (defun LM:GetString (#Default / dcTag result)
  59.   (cond (  (<= (setq dcTag (load_dialog "ACAD")) 0))
  60.         (  (not (new_dialog "acad_txtedit" dcTag)))
  61.         (t
  62.            (set_tile "text_edit" #Default)
  63.            (action_tile "accept" "(setq result (get_tile "text_edit")) (done_dialog)")
  64.            (action_tile "cancel" "(done_dialog)")
  65.            (start_dialog)
  66.            (unload_dialog dcTag)))
  67.   result)
  68. ;;;转换选择集为表
  69. (defun ss2lst (ss vla / a e i)
  70.   (if (= (type ss) (quote PICKSET))
  71.     (progn
  72.       (setq i -1)
  73.       (while (setq e (ssname ss (setq i (1+ i))))
  74.   (if vla
  75.     (setq e (vlax-ename->vla-object e))
  76.     nil
  77.   )
  78.   (setq a (cons e a))
  79.       )
  80.     )
  81.     nil
  82.   )
  83. )
  84. ;;索引点表值
  85. (defun dxf (co en)
  86.   (if(eq(type en)(quote ENAME))(setq en(entget en(quote("*")))))
  87.   (if(vl-consp co)(mapcar (function (lambda (x)(cdr (assoc x en))))co)
  88.     (cdr (assoc co en))))
  89. ;;点表替换
  90. (defun ch-en (co en /)
  91.   (if (eq (type en) (quote ename))
  92.     (setq en (entget en (list "*")))
  93.   )
  94.   (if (assoc (car co) en)
  95.     (subst co (assoc (car co) en) en)
  96.     (reverse (cons co (reverse en)))
  97.   )
  98. )

发表于 2012-11-16 21:58 | 显示全部楼层
大师 之作,看不懂。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 05:45 , Processed in 0.189286 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表