明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: tywsc

[函数] [求助]如何把“(T1' 1.8)”样子的字符串赋给变量使成为真正的表(T1' 1.8)

  [复制链接]
 楼主| 发表于 2011-6-1 10:39:50 | 显示全部楼层
还有,lenlenq先生:
(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),也就是括号中的东西一点没改变,不是括号里每个都加上了双引号.您还有办法吗?
发表于 2011-6-1 10:41:44 | 显示全部楼层
本帖最后由 highflybir 于 2011-6-1 10:42 编辑

回复 tywsc 的帖子

(T1'  1.8) = (T1 (quote 1.8))请参考lisp对于变量命名的规则和lisp语法
 楼主| 发表于 2011-6-1 10:49:16 | 显示全部楼层
本帖最后由 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))

发表于 2011-6-1 10:53:49 | 显示全部楼层
本帖最后由 highflybir 于 2011-6-1 11:12 编辑


T1' , T1(  ,T1.不能成为变量,建议楼主遇到这些字符用
VL-STRING-TRANSLATE 去替换成其他字符,那样才可能满足楼主要求。
你的问题不在于read是不是鸡肋,而是你那样的要求违反lisp规则。
下面的可以满足你要求:譬如你把 ' 全都替换成 ^做法:
(read (VL-STRING-TRANSLATE "'" "^"  "(T1' 1.8)"))

本帖子中包含更多资源

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

x
发表于 2011-6-1 11:17:23 | 显示全部楼层
(VL-STRING-TRANSLATE "\\" "%" "\\a\\aa\\aa") 这个是反斜杠的替换法,
如果要替换多个
(vl-string-translate "\\'()"   "%^[]" "\\a(b)'")
 楼主| 发表于 2011-6-1 14:02:49 | 显示全部楼层
感谢14#楼 15#楼highflybi细心指教
不是我故意找那些怪异的字符(? ^ $ `等),我是从别人的数据文件TXt文件看到的字符,在我的程序调用它们时总出错,我发现是read函数的问题.我总不能要求别人的文件按照lisp的规则行事吧.况且都说autilisp"没有做不到,只有想不到",我想什么都是能解决的.
发表于 2011-6-2 19:52:31 | 显示全部楼层

hightflybir哥

回复 highflybir 的帖子

能把你截图的那本书共享吗?
发表于 2011-6-2 20:00:53 | 显示全部楼层
回复 yanshengjiang 的帖子

我没有这本书的电子书,是印刷的书。
不过你可以在网上搜索到这本书,
Visual LISP程序设计 (autocad 2006)  。
发表于 2011-6-9 21:28:14 | 显示全部楼层
本帖最后由 zhynt 于 2011-6-9 21:38 编辑

你们想复杂了:
(setq aa (read "(T1' 1.8)"))
(setq bb(cadr aa))
(list (car aa)(cadr bb))

不过就是那单撇号没了。
 楼主| 发表于 2011-6-14 15:22:40 | 显示全部楼层
多谢19#楼zhynt指导,
我试了试,确实是个好方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-10 03:49 , Processed in 0.170151 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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