明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1668|回复: 13

[基础] 表内的值无法读取,求解

[复制链接]
发表于 2018-10-5 14:55 | 显示全部楼层 |阅读模式
2明经币
本帖最后由 dakui 于 2018-10-6 15:47 编辑

还是小白,下面红色代码求修改
为什么无法读取到表内的值,如何才能读取到表内的值  
   (setq lst001bak (list
                      (list'("14" "A14")'("15" "A15")'("18" "A18")'("19" "A19"))
                      (list'("22.5" "A225")'("24.5" "A245")'("26.5" "A265")'("28.5" "A285"))
                      (list'("" "")'("" "")'("" "")'("" ""))
                     )
     )

   (set_tile "e01"  (car       (caar   lst001bak)))     赋值 14
   (set_tile "e02"  (car  (cdr (caar  lst001bak))))    赋值 A14
   (set_tile "e03"  (car       (cadar  lst001bak)))    赋值 15
   (set_tile "e04"  (car  (cdr (cadar  lst001bak))))  赋值 A15
   (set_tile "e05"  (car       (caaddr lst001bak)))    赋值 18
   (set_tile "e06"  (car (cadr (caddr  lst001bak))))    赋值 A18
   (set_tile "e07"  (car (car  (cadddr lst001bak))))    赋值 19
   (set_tile "e08"  (car (cadr (cadddr lst001bak))))    赋值 A19


   (set_tile "e09"  ...    赋值 22.5
   (set_tile "e10"  ...    赋值 A22.5
   (set_tile "e11"  ...    赋值 24.5
   (set_tile "e12"  ...    赋值 A24.5
   (set_tile "e13"  ...    赋值 26.5
   (set_tile "e14"  ...    赋值 A26.5
   (set_tile "e15"  ...    赋值 28.5
   (set_tile "e16"  ...    赋值 A28.5



   (set_tile "e17"  ...  赋值 ""         
   (set_tile "e18"  ...  赋值 ""         
   (set_tile "e19"  ...  赋值 ""         
   (set_tile "e20"  ...  赋值 ""         
   (set_tile "e21"  ...  赋值 ""         
   (set_tile "e22"  ...  赋值 ""         
   (set_tile "e23"  ...  赋值 ""         
   (set_tile "e24"  ...  赋值 ""         


修改后为
   (set_tile    "e01"        (caar   (nth 0 lst001bak)))
   (set_tile    "e02"        (cadar  (nth 0 lst001bak)))
   (set_tile    "e03"        (caadr  (nth 0 lst001bak)))
   (set_tile    "e04"        (cadadr (nth 0 lst001bak)))
   (set_tile    "e05"        (caaddr (nth 0 lst001bak)))
   (set_tile    "e06"  (cadr (caddr  (nth 0 lst001bak))))
   (set_tile    "e07"  (car  (cadddr (nth 0 lst001bak))))
   (set_tile    "e08"  (cadr (cadddr (nth 0 lst001bak))))
;
   (set_tile    "e09"        (caar   (nth 1 lst001bak)))
   (set_tile    "e10"        (cadar  (nth 1 lst001bak)))
   (set_tile    "e11"        (caadr  (nth 1 lst001bak)))
   (set_tile    "e12"        (cadadr (nth 1 lst001bak)))
   (set_tile    "e13"        (caaddr (nth 1 lst001bak)))
   (set_tile    "e14"  (cadr (caddr  (nth 1 lst001bak))))
   (set_tile    "e15"  (car  (cadddr (nth 1 lst001bak))))
   (set_tile    "e16"  (cadr (cadddr (nth 1 lst001bak))))
;
   (set_tile    "e17"        (caar   (nth 2 lst001bak)))
   (set_tile    "e18"        (cadar  (nth 2 lst001bak)))
   (set_tile    "e19"        (caadr  (nth 2 lst001bak)))
   (set_tile    "e20"        (cadadr (nth 2 lst001bak)))
   (set_tile    "e21"        (caaddr (nth 2 lst001bak)))
   (set_tile    "e22"  (cadr (caddr  (nth 2 lst001bak))))
   (set_tile    "e23"  (car  (cadddr (nth 2 lst001bak))))
   (set_tile    "e24"  (cadr (cadddr (nth 2 lst001bak))))


最佳答案

查看完整内容

能不要这么多CADDDDR吗?直接(NTH * LST)不就很直接了吗?
发表于 2018-10-5 14:55 | 显示全部楼层
能不要这么多CADDDDR吗?直接(NTH * LST)不就很直接了吗?
回复

使用道具 举报

发表于 2018-10-5 18:58 | 显示全部楼层
别管set_tile
你先把(car  (caaddr lst001bak)之类的代码
调整成你需要的结果
事情自然就解决了
回复

使用道具 举报

 楼主| 发表于 2018-10-5 19:24 | 显示全部楼层
masterlong 发表于 2018-10-5 18:58
别管set_tile
你先把(car  (caaddr lst001bak)之类的代码
调整成你需要的结果

谢谢前辈的回复,我从一开始的这段代码(car  (caaddr lst001bak)
就已经出错了,却不知道错在哪里
回复

使用道具 举报

发表于 2018-10-5 20:10 来自手机 | 显示全部楼层
把你想要的结果排序好,让大家了解才先才可以对症下药,
回复

使用道具 举报

发表于 2018-10-5 20:26 | 显示全部楼层
  1. (list  (car       (caar   lst001bak))
  2.      (car       (cadar  lst001bak))
  3.      (car       (caadr  lst001bak))
  4.      (car       (cadadr lst001bak))
  5.      (car       (caaddr lst001bak))
  6.      (car (cadr (caddr  lst001bak)))
  7.      (car (car  (cadddr lst001bak)))
  8.      (car (cadr (cadddr lst001bak))))
  9. ("14" "15" "22.5" "24.5" "" "" nil nil)


正常返回了数据 没有出错啊
回复

使用道具 举报

 楼主| 发表于 2018-10-5 21:13 | 显示全部楼层
本帖最后由 dakui 于 2018-10-5 21:36 编辑
vectra 发表于 2018-10-5 20:26
正常返回了数据 没有出错啊

谢谢您,前辈
帖子内容没有表达明白,我又修改了一下,方便的时候再帮我看看吧
回复

使用道具 举报

 楼主| 发表于 2018-10-5 21:13 | 显示全部楼层
vectra 发表于 2018-10-5 20:26
正常返回了数据 没有出错啊

谢谢您前辈
回复

使用道具 举报

发表于 2018-10-5 22:59 | 显示全部楼层
evayleung 发表于 2018-10-5 22:53
能不要这么多CADDDDR吗?直接(NTH * LST)不就很直接了吗?

然后把上面那个超长的表,变成三个表也是不错的。。尽量把东西简单化,这样思路才好。
回复

使用道具 举报

发表于 2018-10-6 00:23 | 显示全部楼层

  1. (setq i 0 ret
  2.    (apply 'append
  3.        (mapcar '(lambda (x)
  4.                   (mapcar '(lambda (a)(setq i (1+ i))
  5.                       (list 'set_tile
  6.                        (strcat        "e"
  7.                         (if
  8.                          (< i 10)
  9.                          "0"
  10.                          ""
  11.                         )
  12.                         (itoa i)
  13.                        )
  14.                        a
  15.                       )
  16.                      )
  17.                    (apply 'append x)
  18.                   )
  19.                  )
  20.                lst001bak
  21.        )
  22.    )
  23. )


;ret 返回
((SET_TILE "e01" "14")
  (SET_TILE "e02" "A14")
  (SET_TILE "e03" "15")
  (SET_TILE "e04" "A15")
  (SET_TILE "e05" "18")
  (SET_TILE "e06" "A18")
  (SET_TILE "e07" "19")
  (SET_TILE "e08" "A19")
  (SET_TILE "e09" "22.5")
  (SET_TILE "e10" "A225")
  (SET_TILE "e11" "24.5")
  (SET_TILE "e12" "A245")
  (SET_TILE "e13" "26.5")
  (SET_TILE "e14" "A265")
  (SET_TILE "e15" "28.5")
  (SET_TILE "e16" "A285")
  (SET_TILE "e17" "")
  (SET_TILE "e18" "")
  (SET_TILE "e19" "")
  (SET_TILE "e20" "")
  (SET_TILE "e21" "")
  (SET_TILE "e22" "")
  (SET_TILE "e23" "")
  (SET_TILE "e24" "")
)

要对话框有效执行,可以使用
(eval ret)

p/s : 如果要字首值关联/参考后值, 为什么不使用 client_data_tile ? 更简单&效率

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 22:37 , Processed in 0.238648 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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