(defun c:TT ()
(setq str "(T1? 1.8)")
(setq str (vl-string-trim ")" (vl-string-trim "(" str)))
(setq n (vl-string-search "'" str))
(setq str1 (substr str 1 (1- n)))
(setq str2 (substr str (+ 2 n)))
(mapcar 'vl-princ-to-string (list (read str1) (read str2)))
)
+++++++++++++++++++++++++++++++
(defun c:TT ()
(setq str "(T1\ 2.8)")
(setq str (vl-string-trim ")" (vl-string-trim "(" str)))
(setq n (vl-string-search "'" str))
(setq str1 (substr str 1 (1- n)))
(setq str2 (substr str (+ 2 n)))
(mapcar 'vl-princ-to-string (list (read str1) (read str2)))
)
也就是"(T1? 1.8)"和"(T1\ 1.8)"还有"(T1东 2.8)"及"(T1(A) 2.8)"和"(T1\a 2.8)"和"(T1~a 2.8)"和"(T1-a 2.8)"等等
都出现:
$ (C:TT)
Error: 参数类型错误: numberp: nil
还有,4#楼If先生,我不是希望出现这个结果("T1'" "1.8"),而是希望出现(T1'1.8),也就是括号中的东西一点没改变,不是括号里每个都加上了双引号.您还有办法吗?
本帖最后由 highflybir 于 2011-6-1 10:42 编辑
回复 tywsc 的帖子
(T1'1.8) = (T1 (quote 1.8))请参考lisp对于变量命名的规则和lisp语法
本帖最后由 tywsc 于 2011-6-1 14:35 编辑
另外如下的函数表,求出的aaa值都不是简单去掉如"(T1' 1.8)"上的双引号,read函数执行完都不是想要的正常结果,请教各位高手还有办法吗?
(setq aa "(T1' 1.8)")(setq aaa(read aa))
(setq aa "(T1\ 2.8)")(setq aaa(read aa))
(setq aa "(T1- 2.8)")(setq aaa(read aa))
(setq aa "(T1? 2.8)")(setq aaa(read aa))
(setq aa "(\T1? 2.8)") (setq aaa(read aa))
(setq aa "(T~1 2.8)")(setq aaa(read aa))
(setq aa "(T1东 2.8)")(setq aaa(read aa))
(setq aa "(T1-a 2.8)")(setq aaa(read aa))
(setq aa "(T1~a 2.8)")(setq aaa(read aa))
(setq aa "(T1+ 2.8)") (setq aaa(read aa))
(setq aa "(T1- 2.8)") (setq aaa(read aa))
(setq aa "(T1(A) 2.8)")(setq aaa(read aa))
(setq aa "(T1\a 2.8)")(setq aaa(read aa))
(setq aa "(T1-a 2.8)")(setq aaa(read aa))
(setq aa "(1# 2.8)") (setq aaa(read aa))
本帖最后由 highflybir 于 2011-6-1 11:12 编辑
T1' , T1(,T1.不能成为变量,建议楼主遇到这些字符用
VL-STRING-TRANSLATE 去替换成其他字符,那样才可能满足楼主要求。
你的问题不在于read是不是鸡肋,而是你那样的要求违反lisp规则。
下面的可以满足你要求:譬如你把 ' 全都替换成 ^做法:
(read (VL-STRING-TRANSLATE "'" "^""(T1' 1.8)"))
(VL-STRING-TRANSLATE "\\" "%" "\\a\\aa\\aa") 这个是反斜杠的替换法,
如果要替换多个
(vl-string-translate "\\'()" "%^[]" "\\a(b)'") 感谢14#楼 15#楼highflybi细心指教
不是我故意找那些怪异的字符(? ^ $ `等),我是从别人的数据文件TXt文件看到的字符,在我的程序调用它们时总出错,我发现是read函数的问题.我总不能要求别人的文件按照lisp的规则行事吧.况且都说autilisp"没有做不到,只有想不到",我想什么都是能解决的.
hightflybir哥
回复 highflybir 的帖子能把你截图的那本书共享吗? 回复 yanshengjiang 的帖子
我没有这本书的电子书,是印刷的书。
不过你可以在网上搜索到这本书,
Visual LISP程序设计 (autocad 2006)。 本帖最后由 zhynt 于 2011-6-9 21:38 编辑
你们想复杂了:
(setq aa (read "(T1' 1.8)"))
(setq bb(cadr aa))
(list (car aa)(cadr bb))
不过就是那单撇号没了。
多谢19#楼zhynt指导,
我试了试,确实是个好方法
页:
1
[2]