明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1764|回复: 8

请教各位:

[复制链接]
发表于 2004-10-18 11:58:00 | 显示全部楼层 |阅读模式
各位:今天整了个程序。运行显示结果正确,但是最后显示--错误: 参数类型错误: lentityp nil, 请问是怎么回事,哪位麻烦解答一下。
发表于 2004-10-18 12:52:00 | 显示全部楼层
上载程序看看!
 楼主| 发表于 2004-10-18 14:11:00 | 显示全部楼层
(defun C:ljth (/ OrigEnt OrigEntData OrigText
NumText PrefixLen Prefix Num
NewEntData NewPt Continue
);文字累加替换
(setq CopyIncOldErrorFunc *error*)
(setq *error* CopyIncErrorFunc)
(setvar "blipmode" 0)
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(while (= OrigEnt nil)
(setq OrigEnt (entsel "\n选择文本: "))
)
(setq OrigEntData (cdr (entget (car OrigEnt)))) (if (/= (cdr (assoc 0 OrigEntData)) "TEXT")
(princ "所选对象不是text文本.")
(progn
(setq OrigText (cdr (assoc 1 OrigEntData)))
(setq NumText (GetSuffixDigits OrigText))
(if (= NumText "")
(princ "所选文字不是以数字结尾.")
(progn
(setq PrefixLen (- (strlen OrigText) (strlen NumText)))
(if (= PrefixLen 0)
(setq Prefix "")
(setq Prefix (substr OrigText 1 PrefixLen))
)
(setq Num (atoi NumText))
(setq Continue T)
(while Continue
(setq Num (1+ Num)) ;;; (initget 128)
(setq ss2 (entsel "\n选取替换对象"))
(setq ss2_data (entget (car ss2)))
(setq ss2_typ (cdr (assoc 0 ss2_data)))
(if (= ss2_typ "TEXT")
(setq x2 (assoc 1 ss2_data))
(progn (alert "选取对象不是text文本,不能进行替换。")
(exit)
)
)
(setq xx2 (cons 1 (strcat Prefix (itoa Num))))
(setq
ss2_data (subst xx2 x2 ss2_data)
)
(entmod ss2_data) ) ;end of while loop
)
)
)
) (setq *error* CopyIncOldErrorFunc)
(setvar "osmode" os)
(prin1)
) ;----GetSuffixDigits---------------------------------------------------
; This function accepts a string argument which has digits at the
; end of it. It returns a string of just those digits. For example:
; (GetSuffixDigits "A102") returns "102"
; (GetSuffixDigits "102") returns "102"
; (GetSuffixDigits "") returns ""
; (GetSuffixDigits "ABC") returns ""
; (GetSuffixDigits 123) will generate an error (bad argument type)
;----------------------------------------------------------------------
(defun GetSuffixDigits (OrigStr / Digits PrefixLen Char)
(setq Digits "")
(setq PrefixLen (strlen OrigStr))
(while (> PrefixLen 0)
(setq Char (substr OrigStr PrefixLen 1)) ;get last char of string
(if (wcmatch Char "#") ;if it's a digit...
(progn
(setq Digits (strcat Char Digits)) ;include in result str
(setq PrefixLen (1- PrefixLen)) ;ready to check next chr
)
(setq PrefixLen 0) ;quit at first alpha
)
)
(setq Digits Digits)
) ;----Error Handling----------------------------------------------------
; The routine below supplies our error handling in case the user
; cancels the CopyInc function. The global holds the pointer to the
; current error handler so it can be restored on exit.
;----------------------------------------------------------------------
(setq CopyIncOldErrorFunc nil) ;global holds old func (defun CopyIncErrorFunc (msg)
(if (= msg "函数取消.")
(princ " ")
(if (= msg "中断退出")
(princ " ")
(princ (strcat "\n错误: " msg))
)
)
(setq *error* CopyIncOldErrorFunc)
(prin1)
)
(princ "\n输入 'LJTH' 运行程序.")
(prin1)
 楼主| 发表于 2004-10-18 14:13:00 | 显示全部楼层
这是我摘了别人的程序又加了一些,删了 一些整成的一个程序。请高人帮忙瞅瞅。谢谢。
 楼主| 发表于 2004-10-18 14:15:00 | 显示全部楼层
这程序的作用是对件号进行累加,一开始使用复制功能,全部填写,然后选择第一个号码,再依次选择后面的,后面的将自动累加。
发表于 2004-10-18 14:20:00 | 显示全部楼层
(setq ss2 (entsel "\n选取替换对象"))


When you hit ENTER, ss2 return nil, then


(setq ss2_data (entget (car ss2))) will fire the error message.
 楼主| 发表于 2004-10-18 14:28:00 | 显示全部楼层
请问版主,该怎么修改啊。我刚学这玩意。别人的程序还是半懂不懂。
发表于 2004-10-19 13:28:00 | 显示全部楼层
不用修改,使用时,这里你选择一个正确的对象就不会出错了
发表于 2004-10-19 21:40:00 | 显示全部楼层
看你过滤文字很麻烦,用这(setq ss (ssget '((0 . "TEXT"))))试试!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 11:33 , Processed in 0.253999 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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