找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2529|回复: 17

[弹指神通]:严谨的AutoCAD 2007 害得我花了十几个小时

[复制链接]
发表于 2006-4-13 11:22:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在问题解决的前一刻,我一直想来发布个“2007有bug”的消息,
现在,我只能感叹:2007严谨啊!
事件经过:
在2007中运行我自己编的一个程序,发生严重错误。这个程序在以前所有版本中都是毫无问题的,这不是2007有bug吗?
花了十几个小时测试,最后不得不承认,2007是多么优秀啊!
这是我原来的程序,其中str是获得的字符,这段程序的意思是把字符一个一个分析,然后进行处理,直到字符结束。

  1.   [FONT=courier new]
  2.   (setq        str (cdr (assoc 1 elist))
  3.         n   1
  4.   )
  5.   (while  (/= (substr str n 1) "")
  6.     ...
  7.     ...
  8.     ...
  9.     (setq n (1+ n))  
  10.   )
  11.   [/FONT]


这里的(substr str n 1)就是截取一个字符,当它是中文时,实际是半个字符。
以前的所有版本截取出来的半个中文字不为空,而是对应相应的西文字符,所以这句话没有问题。现在2007不允许这样了,截取出来的半个中文字没有西文字符对应,结果程序大乱。

现在明白,我那句话是不严谨的,只是以前的版本没计较,应该改成
(while  (/= (substr str n ) "")

虽然花了我十几个小时,还是感觉不错,看来2007值得使用。
*-*5 *-*5 *-*5
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-4-13 12:17:36 | 显示全部楼层
值得用,但是机子不行呀!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 13:07:04 | 显示全部楼层
还没有用

我的cad也加载了许多程序

那天试试  谢谢提醒
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 13:21:27 | 显示全部楼层
赶新潮也装07玩一下,无奈速度太慢又卸载了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 14:24:08 | 显示全部楼层
是呀,06和07的速度太慢了,用06和07编辑的dwg,再用低的版本就有可能打不开
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 17:28:55 | 显示全部楼层
可以另存旧版的,比如2000,尤其是2007可以另存为14。应该不存在兼容的问题吧?自动桌子的主打产品呀!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 20:14:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-13 20:47:04 | 显示全部楼层
把所有程序修正了一遍,在2007上运行一切正常,哈哈~~~
2007这个特点,也许能够根治文字乱码,我猜想,
文字乱码就是因为双字节的汉字被拆成单字节的西文字符引起的,2007在双字节上的严谨说不定有遏制作用,请那位有兴趣的朋友试试。
注意,别把因为没设中文字体而显示的问号与我说的乱码混为一谈,拜托。
***
由此,建议编程爱好者,在判断字符时采用ascii函数求出字符的ASCII码,别直接取一个字符来判断,因为ascii函数得到字符串中的第一个字符的ASCII码,这样可以避免要求单个字符了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-13 21:26:36 | 显示全部楼层
用2006就觉得慢得烦,别说2007了。唉,咋整。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-13 22:24:04 | 显示全部楼层
最初由 sunny_258 发布
[B]用2006就觉得慢得烦,别说2007了。唉,咋整。 [/B]

长老,我这个话题不是讨论快慢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-14 00:28:39 | 显示全部楼层
感叹:以上回复中,与原贴能真正交流探讨者几贴?以上回帖(灌水)者中,能跟柔柔对谈者几人?

柔柔发的,定是热贴。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-14 11:53:52 | 显示全部楼层
柔柔长老说的避免乱码指的是偶尔有DWG中有中文字符显示为乱码吧。以前有个同事,用他的机器画的图就存在这个问题,只能用他的机器打开,后来机器重装了一遍,连他的机器打开文件也是乱码了。还有在2006中输入乘号(“×”)时也会出现乱码,不知道2007存不存在这个问题。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-4-14 20:16:30 | 显示全部楼层
有些改进在升级中是找不到资料,在 R14 中对中文字串使用 strcase 也会出现乱码,当然现在的版本都没有这个问题了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-14 23:08:09 | 显示全部楼层
发这个话题出于以下原因:
1,用了几年的从来没任何问题的程序,突然在新版本上不能用了,这个打击相信编过程序的人都能理解。所以,一开始非常惊讶。
2,在寻找原因时,心里是非常矛盾的,一方面希望是2007的错,以此证明自己是对的,另一方面则希望2007没问题,是自己程序的bug,因为只有2007没错误,才有兴趣用它,换句话说,如果是2007的错,我只能无奈的宣布:“我的程序不能在2007上使用”。
3,这个小错误造成的结果非常糟糕,但从程序的语句看,问题实际非常的小,这就不容易被发现,换句话说,这是一不小心就容易犯的错。所以要提出来让大家注意,别犯我这个错误了。

为了让大家能够试验,我临时编个小程序贴上,它在别的版本上没任何问题,在2007上问题就来了。

知道点lsp的都明白,这段程序可以删除空格字符的。

  1.   [FONT=courier new]
  2. (defun c:test (/ sset sslen elist str n str_a kk)
  3.   (setq        sset   (ssget "X" '((0 . "*TEXT")))
  4.         sslen  (sslength sset)
  5.   )
  6.   (while (> sslen 0)
  7.     (setq elist        (entget (ssname sset (setq sslen (1- sslen))))
  8.           ename (cdr (assoc -1 elist))
  9.           str        (cdr (assoc 1 elist))
  10.           n        1
  11.           kk nil
  12.     )
  13.     (while (and (= kk nil) (/= (substr str n 1) ""))
  14.       (setq str_a (substr str n 1))
  15.       (if (/= str_a " ")
  16.         (setq kk T)
  17.         (setq n (1+ n))
  18.       )
  19.     )
  20.     (if        (= kk nil)
  21.       (entdel ename)
  22.     )
  23.   )
  24. )
  25.   [/FONT]


保证在2007上也能用,方法很多
1,把那句 (while (and (= kk nil) (/= (substr str n 1) ""))
改成 (while (and (= kk nil) (/= (substr str n 2) ""))
或者 (while (and (= kk nil) (/= (substr str n ) ""))
2,干脆不用这个方法来判断,改用:


  1.   [FONT=courier new]
  2. (defun c:test (/ sset sslen elist str n str_a kk)
  3.   (setq        sset   (ssget "X" '((0 . "*TEXT")))
  4.         sslen  (sslength sset)
  5.   )
  6.   (while (> sslen 0)
  7.     (setq elist        (entget (ssname sset (setq sslen (1- sslen))))
  8.           ename (cdr (assoc -1 elist))
  9.           str        (cdr (assoc 1 elist))
  10.           n        (strlen str)
  11.           kk nil
  12.     )
  13.     (while (and (= kk nil) (> n 0))
  14.       (setq str_a (substr str n 1))
  15.       (if (/= str_a " ")
  16.         (setq kk T)
  17.         (setq n (1- n))
  18.       )
  19.     )
  20.     (if        (= kk nil)
  21.       (entdel ename)
  22.     )
  23.   )
  24. )
  25.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-5 21:52:27 | 显示全部楼层
还好,我对文字编程的时候没有你那个取字符的习惯。
删除字符串空格用vl函数可以很简单。看到,随手写了两个,以博诸位一笑
[php]
;; 字符串删除空格,by 雨箭风刀.2006.5
(defun delsp (str)
  (while (wcmatch str "*[ ]*")
    (setq str (vl-string-subst "" " " str))
  )
)
;|
(delsp "   asdf  s af 23142安 设发生 阿杀  322毒法 杀毒法2141李   ")
-> "asdfsaf23142安设发生阿杀322毒法杀毒法2141李"
|;
(defun delsp2 (str)
  (vl-list->string(vl-remove-if '(lambda(x)(= 32 x))(vl-string->list str)))
)
;|
(delsp2 "   asdf  s af 23142安 设发生 阿杀  322毒法 杀毒法2141李   ")
-> "asdfsaf23142安设发生阿杀322毒法杀毒法2141李"
|;
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-20 04:35 , Processed in 0.346359 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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