明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: yxp

建议大家贴出自己的通用子程序.

  [复制链接]
发表于 2004-10-30 22:02:00 | 显示全部楼层
这个用递归做的 (defun Str2Chrs(str / pAsc)
(setq pAsc (if (< (ascii str) 128) 1 2))
(cond ((> (strlen str) pAsc)
(cons (substr str 1 pAsc) (str2Chrs (substr str (1+ pAsc)))))
((list (substr str 1 pAsc))))
)
发表于 2004-10-30 22:57:00 | 显示全部楼层
Lisp不要太过追求通用,根据每个程序的特性写函数才能提高Lisp的运行效率
发表于 2004-10-31 08:14:00 | 显示全部楼层
spring发表于2004-10-30 14:17:00不错是个好的建议,强烈要求置顶 ;;;功能:取得文件内容;;;By-Spring;;;2004/10/26(defun GET_FILE_GLA (fi / fil pe fel gla_list)   (setq gl...
这是实用函数栏目中的函数:
http://www.mjtd.com/function/list.asp?id=119&ordertype=byletter&orderkey=2
  1. (defun mc_getfile(files / tmplst x fn)
  2.     (setq files(findfile files))
  3.     (if files
  4.         (progn
  5.             (setq fn (open    files "r"))
  6.             (while (setq x (read-line fn))
  7.                 (setq tmplst(append tmplst(list x)))
  8.             )
  9.             (close fn)
  10.             tmplst
  11.         )
  12.          nil
  13.     )
  14. )
发表于 2004-10-31 08:15:00 | 显示全部楼层
yxp发表于2004-10-30 13:32:00以表的形式返回CAD的搜索路径 (defun ipath(/ ss k kk sstl)(setq ss (getenv \"ACAD\") k 1 kk 1)(while (<= (progn (if (= (substr ss k 1) \";\") ...

这是实用函数中的函数:
http://www.mjtd.com/function/list.asp?id=216&ordertype=byletter&orderkey=7
(defun parse (str delim / lst pos)
(setq pos (vl-string-search delim str))
(while pos
(setq lst (cons (substr str 1 pos) lst)
str (substr str (+ pos 2))
pos (vl-string-search delim str)
)
)
(if (> (strlen str) 0)
(setq lst (cons str lst))
)
(reverse lst)
)
功能
分列,返回一个包含在具有分隔符的字符串所有的标记的列表
语法
(parse str delim)
参数
一个具有分隔符的字符串和分隔符
样例
(ax:Parse (getenv "ACAD") ";")
发表于 2004-10-31 08:17:00 | 显示全部楼层
大家有好的通用函数,以后会收集在实用函数栏目中供大家使用。
发表于 2004-10-31 10:11:00 | 显示全部楼层
mccad发表于2004-10-31 8:15:00以下是引用yxp在2004-10-30 13:32:49的发言:以表的形式返回CAD的搜索路径 (defun ipath(/ ss k kk sstl)(setq s...
这个是我的:
  1. (defun strsub (rep pat str)
  2.    (while (vl-string-search pat str )
  3.        (setq str (vl-string-subst rep pat str))
  4.    )
  5. )
  6. (read(strcat "(" (strsub   " " ";" (getenv "ACAD")) ")"))
;;->(C:\\PROGRAM FILES\\LIZHENG\\LAR2004\\SYS C:\\DOCUMENTS AND SETTINGS\\LXX1 DATA\\AUTODESK\\AUTOCAD 2004\\R16 C:\\AUTOCAD 2004\\SUPPORT C:\\AUTOCAD 2004\\FONTS C:\\AUTOCAD 2004\\HELP C:\\AUTOCAD 2004\\EXPRESS C:\\AUTOCAD 2004\\SUPPORT\\COLOR D:\\LXX\\-MYLSP D:\\LXX\\-BLK D:\\SHX C:\\WORKTOOLS C:\\XDSOFT0 C:\\XDSOFT0 C:\\XDSOFT0 C:\\XDSOFT0 C:\\XDSOFT0 D:\\LXX C:\\TEMP)
复制代码
 楼主| 发表于 2004-10-31 11:54:00 | 显示全部楼层
楼上的函数果然简洁了许多,不过我不太会用扩展函数,因为它在R14下好象不太好使.
发表于 2004-10-31 16:02:00 | 显示全部楼层
本帖最后由 作者 于 2004-11-1 16:20:48 编辑

不好意思,16楼的程序应用方向有误:P 出个题目给大家研究一下:
  1. ;|(x$sub*   新字符 过滤 字符串) => 用"新字符" 替换字符串中符合"过滤"的所有子字符串
  2. (x$sub*   " " ";,@,通道" "14;z5我a3;明经通道4b6;;c到12;z8");;-> "14   5我 3 明经 4 6     到12   8"
  3. (x$sub*   " " ";,@,明经通道,#" "14;z5我a3;明经通道4b6;;c到12;z8") ;;-> "         我                   到         "
  4. (x$sub*   " " ";,@,通道,   " "14;z5我 a3;明经   @通道4b6;;c到   12;z8")  ;;-> "14   5我   3 明经 @ 4 6     到 12   8"   (x$sub*   " "   "明经[a-d;-]通道,;" "14;z明经-通道5我a3;明经a通道4b6;明经;通道;c到明经c通道12;z8") ;;-> "14 z 5我a3   4b6     c到 12 z8"
  5. |;
复制代码
发表于 2004-11-2 11:49:00 | 显示全部楼层
写连续编号的程序,比如:1 2 3 4 5 ....... 或101WORD 102WORD 103WORD....... (defun c:nu (/ wordPt startNumber wordAngle wordHight eng myword)
(setq wdb-os (getvar "OSMODE")) ; Save OSNAP mode
(setvar "OSMODE" 0) ; Turn off OSNAPde
(setq wdb-cm (getvar "CMDECHO")) ; Save OSNAP mode
(setvar "CMDECHO" 0) (setq eng (list
(cons 0 "TEXT")

;(cons 5 173)
;(cons 100 AcDbEntity)
;(cons 67 0)
;(cons 410 Model)
;(cons 8 0)
;(cons 100 AcDbText)
(cons 10 (list 363.89 168.37 0.0))
(cons 40 3.0)
(cons 1 "3")
;(cons 50 0.0)
;(cons 41 0.6)
;(cons 51 0.0)
;(cons 7 ROMANS)
;(cons 71 0)
(cons 72 1)
(cons 11 (list 100 0.0 0.0))
;(cons 210 0.0 0.0 1.0)
;(cons 100 AcDbText)
;(cons 73 0)
)
)
;(setq eng(append '((-1 . <图元名: 1db0b18>))eng))
;(setq eng(entget(ssname (ssget "X" '((0 . "TEXT")))0)))

(setq wordAngle (getreal "\n输入字体的旋转角度<0>:"))
(if (not wordAngle)
(setq wordAngle 0)
)
(setq wordHight(getvar "DIMTXT"))
(setq wordHight (getreal (strcat "\n输入字体的高度<" (rtos wordHight 2 2) ">:")))
(if (or(not wordHight)(= wordHight ""))
(setq wordHight(getvar "DIMTXT"))
)
(if (<= wordAngle -360)
(setq wordAngle 0)
)
(if (>= wordAngle 360)
(setq wordAngle 0)
)
(setq myword (getstring "\n输入起始数<1>:"))
(if(= myword "")(setq myword nil))
(if myword
(progn
(setq startNumber (atoi myword))
(setq myword(substr myword (1+(strlen(itoa startNumber)))))
(if(= myword "")(setq myword nil))
)
)
(if (not startNumber)
(setq startNumber 1)
)
(if myword
(princ (strcat "\n点中数字 "
(strcat (itoa startNumber) myword)
" 的插入点!"
)
)
(princ
(strcat "\n点中数字 " (itoa startNumber) " 的插入点!")
)
)
(setq wordPt (getpoint))
(while wordPt
;(setq eng (subst (cons 0 "TEXT") (assoc 0 eng) eng))
(setq eng (subst (cons 10 wordPt) (assoc 10 eng) eng))
(setq eng (subst (cons 11 wordPt) (assoc 11 eng) eng))
(setq eng (subst (cons 40 wordHight) (assoc 40 eng) eng))
(setq eng (subst (cons 50 (* pi (/ wordAngle 180.0)))
(assoc 50 eng)
eng
)
)
(if myword
(setq eng (subst (cons 1 (strcat (itoa startNumber) myword))
(assoc 1 eng)
eng
)
)
(setq eng (subst (cons 1 (itoa startNumber)) (assoc 1 eng) eng))
)
(entmake eng) (setq startNumber (1+ startNumber))
(if myword
(princ (strcat "\n点中数字 "
(strcat (itoa startNumber) myword)
" 的插入点!"
)
)
(princ
(strcat "\n点中数字 " (itoa startNumber) " 的插入点!")
)
)
(setq wordPt (getpoint))
)
(setvar "OSMODE" wdb-os) ;
(setvar "CMDECHO" wdb-cm) ;恢复原数据
(setq wdb-os nil)
(setq wdb-cm nil)
(print)
)
 楼主| 发表于 2004-11-13 16:27:00 | 显示全部楼层
楼上的,你那个能作为子程序使用吗? 下面是关于符号和字符之间互相转换的两个函数。 (defun sytr(abc)
(car (read (strcat "(" abc " 1)" )))
) 示例:(sytr "aaa")返回aaa (defun trsy(abc / axt)
(setq axt(open "rtts" "w")) (princ abc axt)(close axt)
(setq axt(open "rtts" "r") abc (read-line axt))(close axt)
abc) 示例:(setq aa '(aaa 432 11)) (trsy (car aa)) 返回"AAA"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-30 10:25 , Processed in 0.155699 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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