明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 836|回复: 5

[提问] 为何read函数读不出某些字符串

[复制链接]
发表于 2020-9-14 16:41:43 | 显示全部楼层 |阅读模式
【1】有个字符串的内容是一个图元表,如下所示:
"((-1 . <图元名: 7ffffb09480>) (0 . \"CIRCLE\") (330 . <图元名: 7ffffb03990>) (5 . \"4D8\") (100 . \"AcDbEntity\") (67 . 0) (410 . \"Model\") (8 . \"0\") (100 . \"AcDbCircle\") (10 -1670.83 7927.36 0.0) (40 . 1948.13) (210 0.0 0.0 1.0))"

【2】当用read来读它时,却读不出,即下面这个式子没有任何返回值:
(read "((-1 . <图元名: 7ffffb09480>) (0 . \"CIRCLE\") (330 . <图元名: 7ffffb03990>) (5 . \"4D8\") (100 . \"AcDbEntity\") (67 . 0) (410 . \"Model\") (8 . \"0\") (100 . \"AcDbCircle\") (10 -1670.83 7927.36 0.0) (40 . 1948.13) (210 0.0 0.0 1.0))")

【3】经过检查,是里面的这个元素造成的<图元名: 7ffffb09480>

【4】如果去掉<图元名: 7ffffb09480>冒号后面的空格,read函数就能够处理它了。

【5】继而检查,任何字符串中如果带有一对尖括号<>,而且尖括号中有空格的话,read函数读起来时都容易出问题。

请问各位大神,为什么会这样?尖括号是一种控制字符吗?有没有比双引号更为强势的字符串引导字符?
发表于 2020-9-14 18:39:01 | 显示全部楼层
我也搞不懂,不过这种错误的点对---似乎对其他函数的运行也无效,不只read

我认为,必须(nth 1  点对)或(cdr 1  点对)有效运行才行,

如果是你手工敲的点对运行有误,那就别深究了。老老实实用系统生成的点对

 楼主| 发表于 2020-9-14 19:38:18 | 显示全部楼层
wzg356 发表于 2020-9-14 18:39
我也搞不懂,不过这种错误的点对---似乎对其他函数的运行也无效,不只read

我认为,必须(nth 1  点对) ...

我试下来发现问题是:如果尖括号里面有空格就肯定会出问题
发表于 2020-9-14 20:47:48 | 显示全部楼层
satin 发表于 2020-9-14 19:38
我试下来发现问题是:如果尖括号里面有空格就肯定会出问题

<图元名: xxxxxxxx>这东西不是lisp数据类型,只是显示出来给你看的,你用read去读带空格的字符串,你以为会是一个整体,其实是两个代号名,就和"(-1 . a b)"是一样的道理,read后,是这样的,(-1 . a b),这样算啥,肯定错误。
发表于 2020-9-14 21:03:24 | 显示全部楼层
地板正解
1 把空格去掉,read能读,只能确认这个点对是一个表达式,即2个元素的点对表,不是因为冒号
2 表中元素形式:字符串或表达式,有双引号的为字符串,其他为表达式(含数字 t nil)
3 故就(-1 . <图元名: 7ffffb09480>)而言,一般程序会认为<图元名:与7ffffb09480>各为一个表达式,这个点对表是错误的
发表于 2020-9-15 08:42:15 来自手机 | 显示全部楼层
先用arx把16进制的图元名转ename
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 10:32 , Processed in 0.155982 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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