乐筑天下

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

[编程交流] LISP搜索例程

[复制链接]

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:45:50 | 显示全部楼层 |阅读模式
我有一个Acad r14的现有LISP例程,我正试图将其转换为Acad 2008,但我不知道我在做什么。它要求提供图纸编号,然后查看不同文件位置的文本数据库(path2.txt)。一旦它在其中一个位置找到文件,就会打开它。非常简单,但open命令的工作方式似乎与r14不同。该例程似乎工作正常,直到它实际到达open命令,然后停止。任何帮助都将不胜感激。谢谢,马克
 
(defun C:find1test()
(setq a“”)
(setq b“”)
(setq测试“”)
(setq dwg“”)
(setq f“”)
(setq dwg(getstring T“\n输入图纸名称:”);暂停用户响应
(命令“pan”“0,0”“0.001”)
(setq ext“.dwg”)
(setq c(strcat“l:/users/none/”dwg ext))
(setq f(打开“l:/apps/acad/path2.txt”“r”);打开要读取的文本文件。
(while(/=T检验);循环直到无响应。
(setq a(读取行f));读取打开的文本文件的第一行。
(setq b(strcat a dwg ext))
(setq测试(或(findfile b)))
(如果(=b c)
(程序
(setq tt1(strcat“DRAWING\”“dwg”\“NOT FOUND!!”)
(警报tt1)
(退出)
)
)
)
(关闭f);关闭打开的文本文件。
(setq y(getstring“\n您想保存更改吗?[y]是或[ENTER]否”))
(如果
(或
(=y“y”)
(=y“y”)(命令“qsave”“open”b)(命令“open”“y”b))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:54:35 | 显示全部楼层
也许是这样?
 
  1. (defun C:find1test  (/ GetPaths dwg file)
  2. (vl-load-com)
  3. (defun GetPaths (fname / file line lst)
  4.    (cond (  (not (and (setq fname (findfile fname))
  5.                       (setq file  (open fname "r")))))
  6.          (  (while (setq line (read-line file))
  7.               (setq lst (cons line lst)))
  8.             (close file)))
  9.    
  10.    (reverse lst))
  11. (setq *doc (cond (*doc) ((vla-get-ActiveDocument (vlax-get-acad-object)))))
  12. (if (not (zerop (strlen (setq dwg (getstring t "\nEnter Drawing Name: ")))))
  13.    
  14.    (if (setq file (vl-some
  15.                     (function
  16.                       (lambda (x) (findfile (strcat x dwg ".dwg"))))
  17.                     (GetPaths "l:/apps/acad/path2.txt")))
  18.      (progn
  19.        (initget "Yes No")
  20.        (if (/= "No" (getkword "\nSave Changes? <Yes> : "))
  21.          (if (eq "" (vla-get-fullname *doc))
  22.            (vla-saveas *doc (strcat (vla-get-Path *doc) (vla-get-Name *doc)))
  23.            (vla-save *doc)))
  24.        (vla-Activate
  25.          (vla-open
  26.            (if (zerop (getvar 'SDI))
  27.              (vla-get-Documents (vlax-get-acad-object)) *doc) file :vlax-false)))
  28.      (princ "\n** Drawing not Found **")))
  29. (princ))
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:00:02 | 显示全部楼层
非常感谢你为我改写这篇文章。我用现有的例程替换了它,但我得到了相同的结果。它似乎从正确的目录中获取图形编号,但它将文件名和位置用作命令,而不是打开文件。下面是命令窗口中的序列:(我重命名了例程find-2008.lsp)
 
命令:find-2008
正在初始化。。。
输入图形名称:0809635
保存更改?:
_.打开
命令:L:\drawings\part-0809\0809635。dwg未知命令
“L:\DRAWINGS\PART-0809\0809635.DWG”。按F1键获取帮助。
命令:
 
关于如何纠正这个问题,有什么想法吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:08:47 | 显示全部楼层
信不信由你,我从来没有以这种方式使用过Open,所以这对我来说是一个新的领域,但也就是说,我已经更新了上面的代码,你能试试吗。
 
如果不行,我还有一个主意
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:10:37 | 显示全部楼层
与第一个结果相同。非常奇怪。但我真的很感谢你的帮助。它只是不知道使用文件名作为打开的对象。尽管如此,它正在正确的目录中查找图形-因此很多工作正在进行。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:21:33 | 显示全部楼层
很高兴知道找到文件没问题
 
代码再次更新-使用不同的打开方法。
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:26:20 | 显示全部楼层
嘿!它起作用了!非常感谢你。我想我们今天都学到了一些东西。嗯,你学到了一些东西。在我完全理解你的代码之前,我必须仔细研究你的代码。我对LISP很陌生,只有很少的VBA经验。
 
一定要把这个放在你的工具栏上。不用在网络上到处寻找图形是件好事——你永远不知道别人是否将图形保存在了错误的位置。
 
再次感谢,
做记号
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:31:12 | 显示全部楼层
好的,一个小故障。如果打开了多个图形,则不会使最新打开的图形成为当前图形。它打开文件,然后恢复到上一个图形。有没有办法打开它并使其成为活动文件?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:33:59 | 显示全部楼层
代码再次更新-希望这会成为最新的
 
恐怕我只是一个程序员——我不需要我创建的任何代码我只是喜欢编码
回复

使用道具 举报

1

主题

6

帖子

5

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 12:44:11 | 显示全部楼层
就是这样。再次感谢。只要我需要帮助,我一定会回到这个网站。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 10:57 , Processed in 0.435066 second(s), 72 queries .

© 2020-2025 乐筑天下

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