明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1727|回复: 5

求助(类型转换)

[复制链接]
发表于 2003-6-25 10:16:00 | 显示全部楼层 |阅读模式
字符转换:
经过(setq dd (read "hello"))后dd值为hello,此时(type dd)返回nil,如何再将dd转换为字符?
发表于 2003-6-25 10:19:00 | 显示全部楼层
(vl-symbol-name dd)

不过你调试时是否清除了DD的值?
因为(type dd)应该返回SYM
 楼主| 发表于 2003-6-25 10:25:00 | 显示全部楼层
(vl-symbol-name dd)返回的是一个空串""!
 楼主| 发表于 2003-6-25 10:27:00 | 显示全部楼层
调试一下setq dd (read "符号"))(vl-symbol-name dd)
发表于 2003-6-25 10:45:00 | 显示全部楼层
......
这样,各个函数的调用控制就成了相当简单的描述了。
将字符串转换成符号、表、数值等类型的方法如上文所述,如果想将符号转换成字符串是否有可能?这是在讨论 (Read) 函数用法之后必然想到的问题。如前所述,我们可以在读入的文件纪录字符串前后各加上一个圆括号,再用 (Read) 函数处理。但是,如果由某个应用程序生成的数据文件中带有字符串内容,在 (Read) 之后将会把字符串按符号处理。例:
        (Read “(Mode3 2.5 23.45 0.34 )”)         返回:(MODE3 2.5 23.45 0.34)
        (Type (Car (Read “(Mode3 2.5 23.45 0.34)”)))               返回:SYM
        (Type (Car (Read “(\”Mode3\” 2.5 23.45 0.34)”)))          返回:STR

可见,只有在相当于 \”Mode3\” 的描述下,(Read) 才能将其正确地转换成字符串。在数据文件的生成程序中解决这个问题,必然要修改输出的格式(给字符串加上双引号),这是挺麻烦的事情,而且有时甚至不可能。较好的办法是设计一个将符号转换成字符串的函数,这样的函数用 AutoLISP 程序完成是相当容易的,这也是 AutoLISP 的优秀功能的表现:
(Defun SToA (|s / |f)
       (SetQ |f (Open "stoa" "w")) (PrinC |s |f) (Close |f)
       (SetQ |f (Open "stoa" "r") |s (Read-Line |f)) (Close |f)
       (Eval |s)
)
有了这样的简单函数定义,就可以在 (Read) 之后,把有关数据变成字符串类型了:
(Type (SToA (Car (Read "(Mode3 2.5 23.45 0.34)")))) 返回:STR
虽然现在的 VLISP 提供了 (VL-PrinC-To-String) 函数,可以直接做这件事,但是,无论是函数解释还是函数名,都证明这个函数与我们前面讨论的是同一个东西!

摘自《VisualLISP程序设计——技巧与范例》
发表于 2003-6-25 11:04:00 | 显示全部楼层
你是在哪儿调试的,是放在程序的某一段吗?在给DD付值后好象又给付了空值,
我直接调试了,没问题,

在调试过程中注意查看DD的值,应该是 符号 ,

你这样调试就可以了,(vl-symbol-name '符号)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 17:25 , Processed in 0.153471 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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