prashanthmsp 发表于 2022-7-6 06:59:36

用于在Dra中比较文本的Lisp

大家好!
 
我需要将Autocad绘图中的各种文本与文本报告进行比较。
我需要帮助为这个写一个LISP。
 
逻辑是遵循以下步骤:
 
1) 在中选择文字(特定图层和颜色)。dwg文件
2) 将所有这些文本导出到一个文本文件(我已经有了一个lisp用于此-txtexprt)
而且效果很好!见下文
3) 将输出文本文件中的值与另一个文本文件进行比较,并报告缺失的值。
 
下面是提取文本的代码(步骤2)
如果有人能帮助我实现上述步骤1和3,我将不胜感激!!
 
 

(defun c:txtexprt ()
(setq sset (ssget '((0 . "TEXT"))))
(if sset
   (progn
   (setq itm 0)
   (setq num (sslength sset))
   (setq fn (getfiled "Text Export File" "" "txt" 1))
   (if (/= fn nil)
       (progn
         (setq fh (open fn "w"))
         (while (< itm num)
         (setq hnd (ssname sset itm))
         (setq ent (entget hnd))
         (setq stv (cdr (assoc 1 ent)))
         (princ (strcat stv "\n") fh)
         (setq itm (1+ itm))
         )
         (close fh)
       )
   )
   )
)
(setq sset nil)
(princ)
)

MSasu 发表于 2022-7-6 07:12:02

要按图层和颜色过滤标签,请执行以下操作:
'((0 ."TEXT")
(8 .LayerName)
(62 . ColorNumber))
例子:
'((0 ."TEXT")
(8 ."Labels")
(62 . 2))
 
要比较两个文件,可以使用专用工具,例如CSDiff(免费)。
 
请编辑您的帖子并添加所需的代码标签。
 
另外,欢迎来到论坛!

Tharwat 发表于 2022-7-6 07:19:06

欢迎来到论坛。
 
使用标记代码将代码放入其中。
 
图层的名称和颜色编号是什么?

Tharwat 发表于 2022-7-6 07:24:56

你想用什么样的比较来比较字符串?
 
这方面需要更多细节。

prashanthmsp 发表于 2022-7-6 07:26:51

感谢您的回复,并就“代码发布指南”教育我!
从现在起,我将标记代码。
我仍然在寻找一个地方,我可以“编辑”我以前的帖子。
对不起,我今天刚加入论坛!
 
 
 
 

prashanthmsp 发表于 2022-7-6 07:33:30

进一步解释:
我有一个来自Tekla Structures的文本报告,我想与Autocad绘图中的文本进行比较。
Tekla structures的报告始终包含X个值(例如100),但当我从Autocad生成文本文件时,它将包含Y个值(例如95:始终小于X)。
现在,我对Autocad图形中缺少的值感兴趣(100-95=5个值)
现在我想要另一个具有这5个值的文本文件

prashanthmsp 发表于 2022-7-6 07:43:32

感谢您的回复,并感谢您就“代码发布指南”对我进行的教育!
从现在起,当我发布代码时,我将使用标签。
我仍在想如何“编辑”上一篇文章:滚动:
对不起,我今天刚加入论坛

Tharwat 发表于 2022-7-6 07:50:41

 
它只是一个值还是一个值列表?
您可以上传包含这些值的示例txt文件吗?
 
 
看看你的帖子下面,你会看到一个小按钮(编辑帖子)。

prashanthmsp 发表于 2022-7-6 07:53:21

我已经编辑了帖子!
谢谢
我附上了两个文件,我想比较。
比较这两个文件时,请在List_Tekla的第5行和第7行输入值。List\u Autocad中缺少txt文件。txt文件。
 
正如MSasu建议的那样,软件CSDiff可以突出这一差异。
 
但我知道有一种方法可以在LISP中进行比较
列出Autocad。txt文件
列出Tekla。txt文件

BIGAL 发表于 2022-7-6 08:01:10

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

页: [1]
查看完整版本: 用于在Dra中比较文本的Lisp