乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 11|回复: 6

[编程交流] 关联列表或外部f

[复制链接]

7

主题

143

帖子

136

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 06:29:32 | 显示全部楼层 |阅读模式
存储需要不断访问的数据的更好方法是什么?在关联列表中还是在文件中?
对此有什么想法吗?请分享你的经验。。。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 06:42:40 | 显示全部楼层
我认为这取决于数据。那么你在说什么样的数据呢?
回复

使用道具 举报

7

主题

143

帖子

136

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 06:53:02 | 显示全部楼层
我有很多事情。。。
 
例如:钢筋尺寸、横切面积、重量和库存属性表(交付方式,钢筋或盘绕)
 
我昨晚写了这个:
  1. ;; A-List for Stabstahl
  2. ;; (Nenndurchmesser ds [mm] Nennquerschnittsfläche As [cm^2] Nenngewicht [kg/m] Betonstabstahl [T/nil] Betonstahl in Ringen [T/nil])
  3. (setq *stabstahl*
  4.    (list
  5.        (list 6.0 0.283 0.222 T T)
  6.        (list 8.0 0.503 0.395 T T)
  7.        (list 10.0 0.785 0.617 T T)
  8.        (list 12.0 1.131 0.888 T T)
  9.        (list 14.0 1.54 1.21 T T)
  10.        (list 16.0 2.01 1.58 T nil)
  11.        (list 20.0 3.14 2.47 T nil)
  12.        (list 25.0 4.91 3.85 T nil)
  13.        (list 28.0 6.16 4.83 T nil)
  14.        (list 32.0 8.04 6.31 T nil)
  15.        (list 40.0 12.57 9.86 T nil)
  16.    )
  17. )

 
我想把这本小册子中的其他表格翻译成AutoLisp(共12张)。我的直觉是,对于这种工作,关联列表是最好的,因为表不仅仅是一个大小列表。许多因素决定了从表中选择什么,这些决定大多是在你的脑海中做出的,因为你马上知道你正在使用的混凝土的强度,或者混凝土部分将暴露在什么类型的气候中。
 
但我还没有被说服。我不想让我的程序陷入数据泥潭。
回复

使用道具 举报

7

主题

143

帖子

136

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 07:07:02 | 显示全部楼层
甚至写了一些表达式来提取数据。。。
 
一根20mm的钢筋每米的重量是多少?
  1. (caddr (assoc 20.0 *stabstahl*))

-->2.47千克
 
16mm钢筋在环中可用吗?
  1. (last (assoc 16.0 *stabstahl*))

-->零
 
5个28毫米钢筋的面积是多少?
  1. (* 5 (cadr (assoc 28.0 *stabstahl*)))

-->30.8厘米2
 
8mm钢筋8.5m和14mm钢筋16m的总重量是多少?
  1. (+
  2.    (* 8.5 (caddr (assoc 8.0 *stabstahl*))) ;3.3575
  3.    (* 16.0 (caddr (assoc 14.0 *stabstahl*))) ;19.36
  4. )

-->22.7175千克
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 07:16:13 | 显示全部楼层
如果你想从许多不同的程序中引用一系列列表,我会将列表单独保存。LSP文件,并将其与您的acaddoc一起加载。LSP。这样就没有数据转换,只有一个全局变量,您可以从中引用。

您可以将其编码为assoc替换子程序。不要说(*5(cadr(assoc 28.0*stabstahl*)),而是说(*5(cadr(\u thisIsMyCompanyListRoutine 28.0)))。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:28:19 | 显示全部楼层
我同意Alan关于保留使用AutoLISP列表存储数据的建议;将数据存储在分隔文件中需要对字符串数据进行额外的解析和转换处理,然后才能供程序使用。
 
如果数据结构相当复杂,我可能会选择使用XML文件,然后可以使用MSXML的方法查询该文件。DOMDocument对象,但对于简单的列表,这不是必需的。
 
我唯一的其他建议是在可能的情况下引用文字数据,以避免计算多余的表达式,例如,您发布的列表:
 
  1. (setq *stabstahl*
  2.    (list
  3.        (list 6.0 0.283 0.222 T T)
  4.        (list 8.0 0.503 0.395 T T)
  5.        (list 10.0 0.785 0.617 T T)
  6.        (list 12.0 1.131 0.888 T T)
  7.        (list 14.0 1.54 1.21 T T)
  8.        (list 16.0 2.01 1.58 T nil)
  9.        (list 20.0 3.14 2.47 T nil)
  10.        (list 25.0 4.91 3.85 T nil)
  11.        (list 28.0 6.16 4.83 T nil)
  12.        (list 32.0 8.04 6.31 T nil)
  13.        (list 40.0 12.57 9.86 T nil)
  14.    )
  15. )
将成为:
  1. (setq *stabstahl*
  2.   '(
  3.        ( 6.0  0.283 0.222 t  t )
  4.        ( 8.0  0.503 0.395 t  t )
  5.        (10.0  0.785 0.617 t  t )
  6.        (12.0  1.131 0.888 t  t )
  7.        (14.0  1.54  1.21  t  t )
  8.        (16.0  2.01  1.58  t nil)
  9.        (20.0  3.14  2.47  t nil)
  10.        (25.0  4.91  3.85  t nil)
  11.        (28.0  6.16  4.83  t nil)
  12.        (32.0  8.04  6.31  t nil)
  13.        (40.0 12.57  9.86  t nil)
  14.    )
  15. )
回复

使用道具 举报

7

主题

143

帖子

136

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 07:38:37 | 显示全部楼层
 
我还编写了以下代码,以更轻松地提取数据:
 
  1. (defun rebar-area (/ ds)
  2.    (cadr (assoc ds *stabstahl*))
  3. )
  4. (defun rebar-weight (/ ds)
  5.    (caddr (assoc ds *stabstahl*))
  6. )
  7. (defun rebar-bar (/ ds)
  8.    (cadddr (assoc ds *stabstahl*))
  9. )
  10. (defun rebar-ring (/ ds)
  11.    (last (assoc ds *stabstahl*))
  12. )

谢谢你的提示,李。。。我打赌这会缩短评估时间。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 15:53 , Processed in 0.489444 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表