乐筑天下

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

[编程交流] 使用通配符获取文件p

[复制链接]

8

主题

27

帖子

19

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 06:51:30 | 显示全部楼层 |阅读模式
我对通配符有点陌生,不完全了解它们是如何工作的以及何时可以使用它们。现在,我正试图在代码中使用它们,这将允许我获得有关我试图定义的文件路径的一些附加信息。下面的代码是我正在处理的代码,我遇到了问题:
 
  1. [font=Times New Roman][size=3](defun c:insdat (/ bti jobnumb firstnumb secondnumb chngnumb filepth)
  2. (vl-load-com)
  3. (command "-layer" "m" "G-PLAN-DATM-____-____-N" "lo" "G-PLAN-DATM-____-____-N" "")
  4. (initget 1)
  5. (setq jobnumb (getstring "\nEnter The 7 didgit Job Number:"))
  6. (setq jobnumblen (strlen jobnumb))
  7. (cond ((/= jobnumblen 7)
  8. (print "The Job Number Must Be Exactly 7 Digits Long! Try Again.")
  9.         (exit)
  10.         );cond
  11. );cond
  12. (initget 1)
  13. (setq chngord (getstring "\nEnter Change Order Number:"))
  14. (setq chngordlen (strlen chngord))
  15. (setq firstnumb (substr jobnumb 1 3)
  16. secondnumb (substr jobnumb 4 7)
  17. filepth (strcat "J:\" firstnumb "\" secondnumb "\" chngord "[url="file://\\prod\\Sheet"]\\prod\\Sheet[/url] Metal\")
  18. );setq
  19. (if (vl-file-directory-p filepth)
  20.    (progn
  21.      (setq dept "prod")
  22.      );progn
  23.    (progn
  24.      (setq dept "4-Detailing")
  25.      );progn
  26.    );if
  27. (setq filepth (strcat "J:\" firstnumb "\" secondnumb "\" chngord "\" dept "[url="file://\\Sheet"]\\Sheet[/url] Metal\"))[/size][/font]
  28. [font=Times New Roman][size=3]  (if
  29.    (setq bti
  30.    (getfiled "Select Block to Insert" filepth "dwg" 0)
  31.   );if
  32.    (progn
  33.      (command "._-Insert" bti "_S" 1.0 "0,0,0" 0.00 "" "")
  34.      (while
  35. (/= 0 (getvar "CMDACTIVE"))
  36. (command pause)
  37. );while
  38.      );progn
  39.    (princ "\nNo File picked.")
  40.    );if
  41. (princ)
  42. (setvar "CLAYER" "0")
  43. );defun[/size][/font]

 
这是我遇到的问题。我们的文件目录是如何工作的,首先我们必须指定一个3位数的数字才能进入一个文件夹,然后你需要指定一个4位数的数字才能进入下一个文件夹,但我有一个问题。我可以很好地指定4位数字,但4位数字后面有时(通常)跟着工作的名字,所以看起来像“4***-凯悦4楼”。因此,我想知道是否有一个通配符可以用来获取与该4位数字相关联的作业名,并重新定义我试图切换到“getfield”函数的文件路径。代码现在相当草率,因为我还没有做任何清理或任何形式的重写。
 
谢谢
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:00:30 | 显示全部楼层
您不能使用通配符来提取四位数字后面的项目名称/描述,但由于目录前缀为四位数字,因此您可以简单地使用SUBSTR、methinks。
回复

使用道具 举报

8

主题

27

帖子

19

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:03:59 | 显示全部楼层
我不认为通配符会起作用,但我抱着一点希望,我可以像使用通配符层或块名称一样使用它。
 
我只是好奇,我如何使用substr来获得项目名称?我理解如何使用它添加到我正在定义的作业目录中,但我不确定如何使用它从我试图定义的文件路径中提取信息。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:09:34 | 显示全部楼层
 
我不确定你是否理解SUBSTR[ing]做什么。。。请参阅开发人员文档(我在之前的帖子中为您提供了一个链接)。
 
至于如何获取项目名称,以您的示例为例,假设在项目名称之前有一个四位数前缀,后跟空格连字符空格“-”:
 
  1. (substr "4*** - Hyatt 4th Floor"
回复

使用道具 举报

8

主题

27

帖子

19

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:13:39 | 显示全部楼层
对不起,我不太清楚我在以前的帖子里想要什么。项目名称总是不同的,它可能是几百个不同工作中的一个,我只是用“凯悦4楼”作为一个例子,我之前忘了提到。我的代码现在是如何工作的,它要求用户输入7位数字的作业编号,然后我使用substr将其在3位和4位文件名之间拆分。
 
  1. [font=Times New Roman][size=3] (setq jobnumb (getstring "\nEnter The 7 didgit Job Number:"))[/size][/font]
  2. [font=Times New Roman][size=3] (setq chngord (getstring "\nEnter Change Order Number:"))  [/size][/font]
  3. [font=Times New Roman][size=3] (setq chngordlen (strlen chngord))  [/size][/font]
  4. [font=Times New Roman][size=3] (setq firstnumb (substr jobnumb 1 3) [/size][/font]
  5. [font=Times New Roman][size=3]          secondnumb (substr jobnumb 4 7))[/size][/font]
  6. [font=Times New Roman][size=3]

 
问题是项目名称扩展总是不同的,因此会导致getfield函数无法读取我定义的内容,因为它只能看到,例如,当实际文件名为“4567-凯悦4th Floor”时,文件名为“4567”,因此需要看起来像“J:\\789\\4567-凯悦4th Floor\”,但看起来像这样的J:\\789\\4567\\“这将导致功能失败。我正试图找到一种方法去该文件夹,并能够返回其全名,然后我可以切分并提取我需要的信息。因此,我猜它的故障是,我正在寻找一种方法,以获得用户指定工号的项目名称。
 
谢谢你的帮助,我很感激。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:19:09 | 显示全部楼层
考虑Vl目录文件功能:
 
  1. (vl-load-com)
  2. (defun c:FindSubFolder (/ root prjNum primary secondary folders count)
  3. (if (and
  4.        (setq root "[color="red"]C:\\_SomeFolder\\[/color]")
  5.        (setq prjNum (getstring "\nEnter The 7 didgit Job Number:"))
  6.        (= 7 (strlen prjNum))
  7.        (setq primary (substr prjNum 1 3))
  8.        (setq secondary (substr prjNum 4 7))
  9.        (setq folders (vl-directory-files
  10.                        (strcat root primary)
  11.                        (strcat secondary "*")
  12.                        -1
  13.                      )
  14.        )
  15.      )
  16.    (cond ((= 1 (setq count (length folders)))
  17.           (prompt "\nOne directory found: ")
  18.           (princ (car folders))
  19.          )
  20.          ((< 1 count)
  21.           (prompt "\nMultiple directories found: ")
  22.           (princ
  23.             (vl-string-right-trim
  24.               ", "
  25.               (apply 'strcat
  26.                      (mapcar (function (lambda (x) (strcat x ", ")))
  27.                              folders
  28.                      )
  29.               )
  30.             )
  31.           )
  32.          )
  33.    )
  34.    (prompt "\n** No matching folder found ** ")
  35. )
  36. (princ)
  37. )
回复

使用道具 举报

8

主题

27

帖子

19

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:20:58 | 显示全部楼层
不管我输入了什么工号,它总是显示为“找不到匹配的文件夹”。我删除了代码开头的变量scrubing,然后再次运行它以查看定义了哪些变量,唯一出现“nil”的是“folders”,因为某种原因,没有定义一个。作业编号本应将其带到名为“6157 Bellevue Hyperbarics MB”的文件夹中,但由于某种原因失败了。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:25:12 | 显示全部楼层
代码在我这边有效。。。也许你应该调试它,按照你必须做的更改让它在你的终端工作?
 
我将从定义根变量的字符串开始,逐步转到提供给vl目录文件调用的参数。
回复

使用道具 举报

8

主题

27

帖子

19

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 07:30:54 | 显示全部楼层
哎呀,我犯了个大错误。我复制并粘贴了你写的代码,没有修改“C:\\\u SomeFolder\”部分,这就是它崩溃的原因。在我更改了那个部分以匹配我们的文件结构后,代码运行得很好。再次感谢你的帮助。那些VL、VLA和VLAX函数对我来说仍然是新函数,目前我真的不知道如何使用2或3个以上的函数。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:36:33 | 显示全部楼层
 
别担心;很高兴你把它整理好了。
 
 
我们都从某个地方开始,总有一些东西需要学习。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 14:45 , Processed in 0.627783 second(s), 72 queries .

© 2020-2025 乐筑天下

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