本帖最后由 zgs378530220 于 2025-7-19 20:33 编辑
网友答:
关于中文符号的使用问题,有好几篇帖子都提到过,都是建议要尽可能避免。
这里同样不建议试图解决中文符号的问题,而是建议换一个思路:首先,dcl的label不宜作为变量,建议用key更直观也更直接,毕竟对控件的操作都是通过key来实现的,比如赋初值,确定后取得各个控件的值,修改关联控件的状态等;另外,对相关的key的初值可以用一个表来包含它们,不管是对变量赋值还是初始化控件都很方便
比如(mapcar'set_tile (list "key1""key2"...)(list value1 value2 ...)),假如要把value的值给key同名的变量,(mapcar'(lambda(x y)(set(read x)y)) (list "key1""key2"...)(list value1 value2 ...))
网友答:
可以试试前面加个序号
网友答:
本帖最后由 tryhi 于 2025-7-21 15:46 编辑
(setq 底部后杆 "底部后杆")
(setq 走道斜杆 "走道斜杆")
(princ 底部后杆);按道理应该输出“底部后杆”,实际结果输出“走道斜杆”
你这题目写得太复杂了,这样写就清晰了,这个跟我上次得出来的结论不一样
上次得出来一个固定的结论“变量里面的第一个双字节文字,其第一个字节将会被CAD忽略”,但是这个很奇怪,8个字节的变量,只有最后两个字节相同,居然也会窜在一起,更奇怪的是同时删除任何一个字,或者同时加上一个字母,它又正常了,这个完全看不出来规律了
而且运行完上面3条命令后,再(read "底部后杆"),输出来的居然变成了走道斜杆,也就说说在中文下,不止变量会出现异常,read同样也会异常
网友答: “变量名我有用于DCL的label值”让数值顺序和LABEL顺序一致就行了
网友答:
我先定义了“底部后杆”这个变量,但是竟然识别为“走道斜杆”的值,用read来赋值,会出现这个问题,之前是直接(setq 底部后杆 第一背条)就正常显示,网友答: 不知道是不是read解析的问题网友答: 汉字会被转码识别,而汉字又会被分解为两个hex,所以,如果汉字变量的第一个hex落在同一个区,变量的指针会相互覆盖,这也是为啥不推荐用汉字做变量。网友答: 这个问题,大海tryhi老师已经分析过,建议看一下。网友答: dcl有几十个控件,lable肯定要使用中文,key会加英文前缀,然后在过程中同样使用中文变量,主要是方便理解调试,飞诗编辑器也很给力。原代码有太多setq了,还涉及到默认赋值以及推荐运算,自定义计算等,重复操作太多,本来是想精简一下,用foreach批量处理,才萌生将lable中文名作为变量名read处理。网友答: 多谢各位解惑答疑,还是老老实实用英文变量吧,毕竟用lsp代码再好看,也不抵准确无误的结果
- 复制代码
- (foreach x '("背部竖杆" "走道前杆" "走道连杆" "走道后杆" "顶部前杆" "顶部连杆" "顶部后杆" "底部前杆" "底部连杆" "底部后杆") (set (read x) 第一背条))
- (foreach x '("走道斜杆" "走道踏杆" "第二背条") (set (read x) ""))
- (foreach x '("背部竖杆" "走道前杆" "走道连杆" "走道后杆" "顶部前杆" "顶部连杆" "顶部后杆" "底部前杆" "底部连杆" "底部后杆") (set (read x) 第一背条))
- 请问在lisp中怎么避免中文错乱,以上变量底部后杆被识别为走道斜杆;
- 如果改为英文,就能正确赋值,但是变量名我有用于DCL的label值。
网友答:
zgs378530220 发表于 2025-7-19 20:52
我先定义了“底部后杆”这个变量,但是竟然识别为“走道斜杆”的值,用read来赋值,会出现这个问题,之前 ...
关于中文符号的使用问题,有好几篇帖子都提到过,都是建议要尽可能避免。
这里同样不建议试图解决中文符号的问题,而是建议换一个思路:首先,dcl的label不宜作为变量,建议用key更直观也更直接,毕竟对控件的操作都是通过key来实现的,比如赋初值,确定后取得各个控件的值,修改关联控件的状态等;另外,对相关的key的初值可以用一个表来包含它们,不管是对变量赋值还是初始化控件都很方便
比如(mapcar'set_tile (list "key1""key2"...)(list value1 value2 ...)),假如要把value的值给key同名的变量,(mapcar'(lambda(x y)(set(read x)y)) (list "key1""key2"...)(list value1 value2 ...))
网友答:
zgs378530220 发表于 2025-7-20 18:05
dcl有几十个控件,lable肯定要使用中文,key会加英文前缀,然后在过程中同样使用中文变量,主要是方便理解 ...
可以试试前面加个序号

- (foreach x '("1背部竖杆" "2走道前杆" "3走道连杆" "4走道后杆" "5顶部前杆" "6顶部连杆" "7顶部后杆" "8底部前杆" "9底部连杆" "10底部后杆")
- (princ "\n")
- (princ (read x))
- )
- (foreach x '("1走道斜杆" "2走道踏杆" "3第二背条")
- (princ "\n")
- (princ (read x))
- )
(setq 底部后杆 "底部后杆")
(setq 走道斜杆 "走道斜杆")
(princ 底部后杆);按道理应该输出“底部后杆”,实际结果输出“走道斜杆”
你这题目写得太复杂了,这样写就清晰了,这个跟我上次得出来的结论不一样
上次得出来一个固定的结论“变量里面的第一个双字节文字,其第一个字节将会被CAD忽略”,但是这个很奇怪,8个字节的变量,只有最后两个字节相同,居然也会窜在一起,更奇怪的是同时删除任何一个字,或者同时加上一个字母,它又正常了,这个完全看不出来规律了
而且运行完上面3条命令后,再(read "底部后杆"),输出来的居然变成了走道斜杆,也就说说在中文下,不止变量会出现异常,read同样也会异常
网友答: “变量名我有用于DCL的label值”让数值顺序和LABEL顺序一致就行了
网友答:
llsheng_73 发表于 2025-7-19 20:34
“变量名我有用于DCL的label值”让数值顺序和LABEL顺序一致就行了
我先定义了“底部后杆”这个变量,但是竟然识别为“走道斜杆”的值,用read来赋值,会出现这个问题,之前是直接(setq 底部后杆 第一背条)就正常显示,网友答: 不知道是不是read解析的问题网友答: 汉字会被转码识别,而汉字又会被分解为两个hex,所以,如果汉字变量的第一个hex落在同一个区,变量的指针会相互覆盖,这也是为啥不推荐用汉字做变量。网友答: 这个问题,大海tryhi老师已经分析过,建议看一下。网友答: dcl有几十个控件,lable肯定要使用中文,key会加英文前缀,然后在过程中同样使用中文变量,主要是方便理解调试,飞诗编辑器也很给力。原代码有太多setq了,还涉及到默认赋值以及推荐运算,自定义计算等,重复操作太多,本来是想精简一下,用foreach批量处理,才萌生将lable中文名作为变量名read处理。网友答: 多谢各位解惑答疑,还是老老实实用英文变量吧,毕竟用lsp代码再好看,也不抵准确无误的结果