- UID
- 215173
- 积分
- 411
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-1-29
- 最后登录
- 1970-1-1
|
发表于 2005-4-2 14:59:15
|
显示全部楼层
(defun c:lsp_36()
(prompt "\n选取文字...")
(setq ss (ssget));;;;选取需要大小写转换的文字
(setq i 0);;;;;记数器归0
(repeat (sslength ss);;;;;进入循环次数为你选择对象的数量
(setq ssn (ssname ss i));;;;取得第I个对象
(setq ssdata (entget ssn));;;;取得对象的DXF代码信息
(setq sstyp (cdr (assoc 0 ssdata)));;;取得对象的类型
(if (= sstyp "TEXT");;;如果对象类型是文字
(progn ;;;则
(setq old_txt (assoc 1 ssdata));;取得对象包含的文字内容群码
(setq txt (cdr old_txt));;;取得对象文字内容
(chktxt);;;调用自程序转换大小写
(setq new_txt (cons 1 pp));;;将子程序产生的新文字组码
(setq ssdata (subst new_txt old_txt ssdata));;;新旧码替换
(entmod ssdata);;;;更新文字对象
)
)
(setq i (1+ i));;;记数器加一
)
)
(defun chktxt() ;判断文字,转换大小写子程序
(setq p "" pp "" n 1 key nil);;;初始化数据,
(repeat (strlen txt);;;以对象文字含字母数循环
(setq pk p);;将P赋给PK即""
(setq p (substr txt n 1));;取得文字中第N个字母
(if (= n 1) ;;;如果是第一个字母
(setq key t);;;判断量KEY为真
(if (= pk " ") (setq key t) (setq key nil));;;如果前一个字母为空格,判断量KEY为真否则为空
)
(if (= key nil);;如果KEY为空,即是说前一个字母既不是开头字母也不是空格的话
(setq pp (strcat pp (strcase p t)));;;;将它转为小写
(setq pp (strcat pp (strcase p)));;否则转为大写
)
(setq n (1+ n));;;循环加1
)
)
(princ "\n---------->> LSP_36 <<----------");;;程序结束时打印文字
(prin1) ;;;无返回推出该程序
私下认为该程序不够漂亮,有些繁琐,可以写得更漂亮些..
调用自程序最好是以参数方式调用,否则看上去有些混乱! |
|