明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1535|回复: 7

这段子程序看不太懂,谁帮我注释一下?

[复制链接]
发表于 2005-4-2 10:00:00 | 显示全部楼层 |阅读模式
(defun chktxt() ;判断文字,转换大小写子程序
(setq p "" pp "" n 1 key nil)
(repeat (strlen txt)
(setq pk p)
(setq p (substr txt n 1))
(if (= n 1)
(setq key t)
(if (= pk " ") (setq key t) (setq key nil))
)
(if (= key nil)
(setq pp (strcat pp (strcase p t)))
(setq pp (strcat pp (strcase p)))
)
(setq n (1+ n))
)
)
发表于 2005-4-2 10:25:00 | 显示全部楼层
你的程序本身就有问题


变量txt有值吗?
 楼主| 发表于 2005-4-2 10:55:00 | 显示全部楼层
txt为提取的文本内容,我只要帮我注释子程序内容() (defun c:lsp_36()
(prompt "\n选取文字...")
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
(setq ssn (ssname ss i))
(setq ssdata (entget ssn))
(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)
(setq p (substr txt n 1))
(if (= n 1)
(setq key t)
(if (= pk " ") (setq key t) (setq key nil))
)
(if (= key nil)
(setq pp (strcat pp (strcase p t)))
(setq pp (strcat pp (strcase p)))
)
(setq n (1+ n))
)
)
(princ "\n---------->> LSP_36 <<----------")
(prin1)
发表于 2005-4-2 11:54:00 | 显示全部楼层
楼主的程序应该多用局部变量,不然很多程序一起加载时,可能会造成不可预计后果。
 楼主| 发表于 2005-4-2 14:29:00 | 显示全部楼层
给个解释啊?
发表于 2005-4-2 15:13:00 | 显示全部楼层
看来楼主对编程没有什么经验,应该好好系统地学习一下
发表于 2005-4-2 15:38:00 | 显示全部楼层
(defun c:lsp_36() ;在命令行打印文字
(prompt "\n选取文字...") ;选取对象,加入选集SS
(setq ss (ssget))
(setq i 0) ;以SS中对象的数量为循环次数,分别判断对象是否为“TEXT”,若是则运行你的那个转换大小写的程序 (repeat (sslength ss)
(setq ssn (ssname ss i))
(setq ssdata (entget ssn))
(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) ;以TXT中的字符个数为循环次数,转换TXT中文字的为小写
(repeat (strlen txt)
(setq pk p)
(setq p (substr txt n 1))
(if (= n 1)
(setq key t)
(if (= pk " ") (setq key t) (setq key nil))
)
(if (= key nil)
(setq pp (strcat pp (strcase p t)))
(setq pp (strcat pp (strcase p)))
)
(setq n (1+ n))
)
)
(princ "\n---------->> LSP_36 <<----------")
(prin1)
发表于 2005-4-4 19:11:00 | 显示全部楼层
(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) ;;;无返回推出该程序
私下认为该程序不够漂亮,有些繁琐,可以写得更漂亮些..
调用自程序最好是以参数方式调用,否则看上去有些混乱!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 10:46 , Processed in 0.181673 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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