乐筑天下

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

[编程交流] 用于在Dra中比较文本的Lisp

[复制链接]

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 06:59:36 | 显示全部楼层 |阅读模式
大家好!
 
我需要将Autocad绘图中的各种文本与文本报告进行比较。
我需要帮助为这个写一个LISP。
 
逻辑是遵循以下步骤:
 
1) 在中选择文字(特定图层和颜色)。dwg文件
2) 将所有这些文本导出到一个文本文件(我已经有了一个lisp用于此-txtexprt)
而且效果很好!见下文
3) 将输出文本文件中的值与另一个文本文件进行比较,并报告缺失的值。
 
下面是提取文本的代码(步骤2)
如果有人能帮助我实现上述步骤1和3,我将不胜感激!!
 
 
  1. (defun c:txtexprt ()
  2. (setq sset (ssget '((0 . "TEXT"))))
  3. (if sset
  4.    (progn
  5.      (setq itm 0)
  6.      (setq num (sslength sset))
  7.      (setq fn (getfiled "Text Export File" "" "txt" 1))
  8.      (if (/= fn nil)
  9.        (progn
  10.          (setq fh (open fn "w"))
  11.          (while (< itm num)
  12.            (setq hnd (ssname sset itm))
  13.            (setq ent (entget hnd))
  14.            (setq stv (cdr (assoc 1 ent)))
  15.            (princ (strcat stv "\n") fh)
  16.            (setq itm (1+ itm))
  17.          )
  18.          (close fh)
  19.        )
  20.      )
  21.    )
  22. )
  23. (setq sset nil)
  24. (princ)
  25. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:12:02 | 显示全部楼层
要按图层和颜色过滤标签,请执行以下操作:
  1. '((0 .  "TEXT")
  2. (8 .  [i]LayerName[/i])
  3. (62 . [i]ColorNumber[/i]))

例子:
  1. '((0 .  "TEXT")
  2. (8 .  "Labels")
  3. (62 . 2))

 
要比较两个文件,可以使用专用工具,例如CSDiff(免费)。
 
请编辑您的帖子并添加所需的代码标签。
 
另外,欢迎来到论坛!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:19:06 | 显示全部楼层
欢迎来到论坛。
 
使用标记代码将代码放入其中。
 
图层的名称和颜色编号是什么?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:24:56 | 显示全部楼层
你想用什么样的比较来比较字符串?
 
这方面需要更多细节。
回复

使用道具 举报

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 07:26:51 | 显示全部楼层
感谢您的回复,并就“代码发布指南”教育我!
从现在起,我将标记代码。
我仍然在寻找一个地方,我可以“编辑”我以前的帖子。
对不起,我今天刚加入论坛!
 
 
 
 
回复

使用道具 举报

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 07:33:30 | 显示全部楼层
进一步解释:
我有一个来自Tekla Structures的文本报告,我想与Autocad绘图中的文本进行比较。
Tekla structures的报告始终包含X个值(例如100),但当我从Autocad生成文本文件时,它将包含Y个值(例如95:始终小于X)。
现在,我对Autocad图形中缺少的值感兴趣(100-95=5个值)
现在我想要另一个具有这5个值的文本文件
回复

使用道具 举报

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 07:43:32 | 显示全部楼层
感谢您的回复,并感谢您就“代码发布指南”对我进行的教育!
从现在起,当我发布代码时,我将使用标签。
我仍在想如何“编辑”上一篇文章:滚动:
对不起,我今天刚加入论坛
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:50:41 | 显示全部楼层
 
它只是一个值还是一个值列表?
您可以上传包含这些值的示例txt文件吗?
 
 
看看你的帖子下面,你会看到一个小按钮(编辑帖子)。
回复

使用道具 举报

3

主题

19

帖子

16

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 07:53:21 | 显示全部楼层
我已经编辑了帖子!
谢谢
我附上了两个文件,我想比较。
比较这两个文件时,请在List_Tekla的第5行和第7行输入值。List\u Autocad中缺少txt文件。txt文件。
 
正如MSasu建议的那样,软件CSDiff可以突出这一差异。
 
但我知道有一种方法可以在LISP中进行比较
列出Autocad。txt文件
列出Tekla。txt文件
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 08:01:10 | 显示全部楼层
可以很容易地完成第一步,在外部文本中读取到一个列表,比如100个项目,然后(第56个列表文本)是第56行,第二个列表是你的ssget,如上代码,但我会添加层等建议。
 
好的,你需要两个循环,取第一个列表,第一个值,并将其与第二个列表中的每一行进行比较。如果找不到,则添加到第三个列表,获取下一个值,再次与列表进行比较。我希望有人已经有了这方面的代码
 
  1. something like this method
  2. (repeat numlist1
  3. (setq ans (nth x sset))
  4. (repeat numlist2
  5. ((setq ans2 (nth y sset))
  6. (if (= ans ans2)
  7. (princ "found") ; could delete from list as it will make searching faster
  8. )))))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 11:19 , Processed in 0.992299 second(s), 83 queries .

© 2020-2025 乐筑天下

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