找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2339|回复: 5

[求助] [求助]:最近发现 R2007 里substr的一个问题

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2007-2-15 16:28:13 | 显示全部楼层 |阅读模式

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

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

×
最近发现 R2007 里substr的一个问题


  1. 命令: (substr "但pat适" 1 1)
  2. ; 错误: 发生未知意外
  3. ; 警告: 忽略展开 未知异常

  4. 命令: (substr "但pat适" 1 2)
  5. "但"

  6. 命令: (substr "但pat适" 2 1)
  7. ; 错误: 发生未知意外
  8. ; 警告: 忽略展开 未知异常
复制代码

cad2007用的是unicode,现在很多以前的代码不知道怎么处理了,
怎么办?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-2-15 19:17:23 | 显示全部楼层
mmmm还是谁谁早提出过这个问题.2007cad不认半个中文字符.
vl-string->list 看是否是中文字符,再分断
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-15 19:40:45 | 显示全部楼层
对啊,可能只能用这两个vl函数来构建一下函数了。

(setq a "我的家")
(substr a 1 1)
; error: Unknown exception occurred
; warning: unwind skipped on unknown exception

(setq b (vl-string->list a))=》
(206 210 181 196 188 210)

(vl-list->string b)
"我的家"

(vl-list->string '(100 100 100 100 206 210))
"dddd我"


(setq c "但pat适")
"但pat适"

(setq d (vl-string->list c))
(181 171 112 97 116 202 202)

可能把substr按照这种unicode的写法进行改写,感觉应该可行

可以看出,汉字的数字都是大于某个数的,大于某个数之后就得用两个数字来表达了,好像是大于128

aeo版主前我班门弄斧一下了

  1. (defun substr (str star leng / res strlst i x j item res1)
  2.   (setq strlst (vl-string->list str))
  3.   (setq i 0)
  4.   (while (< i (length strlst))
  5.     (if (< (nth i strlst) 129)
  6.       (setq res (append
  7.                   res
  8.                   (list (list (nth i strlst)))
  9.                 )
  10.             i (1+ i)
  11.       )
  12.       (setq res (append
  13.                   res
  14.                   (list (list (nth i strlst) (nth (1+ i) strlst)))
  15.                 )
  16.             i (+ i 2)
  17.       )
  18.     )
  19.   )
  20.   (setq j star)
  21.   (repeat leng
  22.      (if (setq item (nth (1- j) res))
  23.      (setq res1 (append res1 item))
  24.      )
  25.      (setq j (1+ j))
  26.   )
  27.   (vl-list->string res1)

  28. )

  29. (substr "但pat适" 1 1)


函数编写拖沓无比,要是用些lambda或者mapcar应会好很多,可惜不大懂,加了一堆局部变量。

现在有一个问题就是,autocad中的substr的length是可选参数,这个在lisp中怎么做到的?
这里有一篇讨论的,不过我不大看得懂
http://groups.google.com/group/a ... =1#2870653450465343

不过现在想想,autocad可能不再要Lisp了,从2000之后都没有见它增加什么函数,真郁闷。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-16 17:08:25 | 显示全部楼层
[php]
;|
(x-txt2lst e) = text文本以单个文字列表输出-------------------lxx.2004.8
(x-txt2lst (ssname (ssget ":s" '((0 . "TEXT"))) 0))
"cad总平面-规划图" -> ("c" "a" "d" "总" "平" "面" "-" "规" "划" "图")
|;
(defun x-txt2lst (e / txt st stl)
  (setq txt (cdr(assoc 1 (entget e))) stl T);(x-getdxf e 1);;
  (mapcar 'vl-list->string
    (vl-remove-if 'null
      (mapcar '(lambda(x)
                  (cond
                    ((< x 160) (list x)) ;; 一般 汉字编码 > 160.
                    (T (if stl (setq st x stl nil)(setq stl (list st x))))
                   )
                ) (vl-string->list txt)
      )
    )
  )
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2007-2-16 20:39:22 | 显示全部楼层
写都会写
就算lisp从此没substr,程序也可以写
关键现在很多以前的函数都没用了

(while ... (substr str n 1) ...
都会出错,比如std-系列有很多是这么写的,都要改写。
autodesk太不负责了.




还有更深的也不行了
命令: (chr 100)
"d"

命令: (wcmatch (strcat (chr 166)(chr 100)) "*d")
nil

命令: (wcmatch (strcat (chr 201)(chr 166)(chr 100)) "*d")
T

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

使用道具 举报

发表于 2007-2-16 21:40:56 | 显示全部楼层
个人觉得,假如是自己用,要不就转成低版本(不过以后要是cad08,09一直来,就比较麻烦)

或者暂时写一些通用函数,自动加载代替之(也比较烦)

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 19:03 , Processed in 0.200575 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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