乐筑天下

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

[编程交流] 从外部文件读取

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:02:56 | 显示全部楼层 |阅读模式
嘿伙计们,
Fuccaro在前一篇文章中很好心地帮了我,并为我写了一个小脚本,它基本上是在图形中搜索具有两个特定属性的块。
看起来是这样的:
  1. (defun c:FindTwo()
  2. ;| Searches for blocks having two specific attributes
  3.    Fuccaro Miklos
  4.    2010.12 |;
  5. (setq ss (ssget "X" (list '(0 . "INSERT") '(66 . 1))))
  6. (setq a1 (getstring "\n1st attribute to search for ")
  7.    a2 (getstring "\n2nd attribute to search for ")
  8.    found 0
  9.    )
  10. (repeat (setq i (sslength ss))
  11.    (if (check (ssname ss (setq i (1- i))) a1 a2) (setq found (1+ found)))
  12.    )
  13. (strcat " ---> " (itoa found) " block(s) found")
  14. )
  15. (defun check (en a1 a2)
  16. (setq hit 0 a0 (cdr (assoc 0 (setq el (entget en)))))
  17. (while (/= a0 "SEQEND")
  18.    (if (= a0 "ATTRIB") (if (member (cdr (assoc 1 el)) (list a1 a2)) (setq hit (1+ hit))))
  19.    (setq a0 (cdr (assoc 0 (setq el (entget (setq en (entnext en)))))))
  20.    )
  21. (= hit 2)
  22. )

这正是我想做的。它是完美的。然而,我的意图是,一旦我找到了一种找到我想要的块的方法,我将制作一个LISP,它将从存储在Excell文件或文本文件中的数据列表中找到块,甚至更好地访问数据库文件。(什么文件类型对我来说无关紧要,因为我可以将数据从数据库复制并粘贴到新文档中)
唯一的问题是,将Fuccaros脚本更改为从外部文件读取值比我想象的要困难。
任何帮助都将不胜感激。
(我决定发布一个新帖子,因为我的问题与Fuccaro帮助我的帖子不太相关,而且我对一直缠着Fuccaro来帮助我感到很难过。)
谢谢大家!
-克雷格
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:12:46 | 显示全部楼层
也许Jeffery P.Sanders的名为XL的lisp程序可能对您有所帮助。有关更多信息,请单击此链接。
 
http://www.jefferypsanders.com/autolisp_XL.html
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:18:38 | 显示全部楼层
注意:我一直在努力阅读关于如何做到这一点的所有内容,例如:http://www.pixelgraphicsinc.com/AutoLisp_File_Handling.html
这确实对我有帮助,尽管我找不到任何足够具体到我要做什么的教程/指南。
我希望我已经充分解释了我想要做的事情。基本上,Fuccaro编写的代码部分:
(setq a1(getstring“\n要搜索的第一个属性”),:*在Excel电子表格中搜索,Collom 1*:,。
a2(getstring“\n要搜索的第二个属性”),:*在Excel电子表格中搜索,Collom 2*:,。
 
希望这有意义。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:24:02 | 显示全部楼层
谢谢你的回复。
这个程序看起来真的很好,但我想做的无疑要简单得多。
我的最后一个帖子应该解释得更清楚。
谢谢
-克雷格
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:25:51 | 显示全部楼层
我一整天都在做这件事,我觉得我的头脑有点清醒了。
我现在真正需要知道的是如何读取CSV文件,并将数据存储为变量。
我可以做到这一点,只是我想将','(逗号)之前的第一位数据存储为变量,然后将','(逗号)之后的第二位数据保存为变量,依此类推,直到它到达文件末尾。
我认为我已经完成了所有其余的代码(我的意思是,我知道一旦得到变量,该如何处理它们)。
到目前为止,我有:
  1. (setq k 1)
  2. (setq a "")
  3. (setq lst nil)
  4. (repeat (strlen st)
  5. (if (= (substr st k 1) ",")
  6. (progn
  7. (setq lst (append lst (list (atof a))))
  8. (setq a "")
  9. )
  10. (setq a (strcat a (substr st k 1)))
  11. )
  12. (setq k (+ k 1))
  13. )
  14. (setq lst (append lst (list (atof a))))
  15. )
  16. (defun c:rects ()
  17. (setq f (open "C:/Documents and Settings/Marek_AU_Automation/Desktop/test.csv" "r")) ;-Opens the
  18. file to read
  19. (setq dataline (read-line f))                ;-Reads the header
  20. (setq dataline (read-line f))                ;-Reads the 1st data line
  21. (while (/= dataline "THEEND")                ;-Loop until the end of the file
  22. (setq dataline (parse_nums dataline))        ;-Parse the data line variable value
  23. (princ dataline)
  24. ; ---ALL THE CODE TO SEARCH ETC SHOULD GO HERE---
  25. (setq dataline (read-line f))              ;-Read the next data line
  26. )
  27.                                          
  28. (close f)                                    ;-Close the file
  29. )

但我觉得我走错了方向,(解析数据等)
谢谢大家。
-克雷格
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 10:32:16 | 显示全部楼层
李写了一个很好的CSV读取程序需要在这里搜索
 
有许多变量需要一直读取单个字符直到行尾,一旦找到第一个,保存为var1,然后从linevariable中删除重新搜索查找,保存var2从linevariable中删除保持重复或查找的位置,然后使用substr
 
(while(setq new_line(read line fopen))
(setq东距(substr new_1号线)
(setq北距(substr new_line 10 9))
(setq高度(substr new_line 20 5))
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:38:02 | 显示全部楼层
如果您想直接与Access MDB文件交互,可以使用ADOLisp。有一个PDF手册和一个链接到MDB文件的示例。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:41:39 | 显示全部楼层
谢谢你的帮助。
我会看看你刚才提到的节目。
我理解你的意思(存储var1,清除数据线,存储var2…)
但我只是觉得一定有一种更简单的方法可以从CSV文件中读取一些数据。我可以逐个字符检查,但CSV文件中每个字符串的长度可能不同,因此我无法将变量硬编码到脚本中(例如将字符1存储在“var1”中,将字符2存储在“var2”中…)
我的意思是我可以在定义每个变量之前放一个if语句,比如“if character/=”,“然后存储下一个变量”
但我只是觉得这会很混乱,我会有很多不需要的代码行。一个字符串只能由2个字符组成,另一个由10个字符组成。
我希望我说得有道理。
不过我会去找你建议的剧本。
非常感谢你的帮助!
-克雷格
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:49:19 | 显示全部楼层
谢谢你,伙计!
我现在就去找那个剧本。
我只需要从脚本中复制代码,并将其放入搜索属性脚本中。因此,可以通过Access数据库中的内容来定义搜索条件。
谢谢
-克雷格
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:55:51 | 显示全部楼层
我下载了该程序以连接到Access数据库。
使用它可能会以某种方式实现我想要的,尽管这将非常困难,而且我确信它一定比我正在做的要容易。
这应该解释:
110259fahaa25rd8t5hr25.jpg
这就是我刚才运行的程序,它会提示输入两个值,我自己查找一个CSV文件,然后复制这些值。
110300moiwsn5hsssmaaa5.jpg
这就是CSV文件,其中包含我要搜索的数据。
110301crr6x3ar2wai9qqu.jpg
这是我在CAD中搜索程序的代码。
 
我想做的是,而不是我查找CSV文件并在命令行中键入Collum A中的值,然后对Collum B也是如此,数千次地,向脚本添加一些代码,该脚本自动从CSV文件中查找值。
然而,事实证明,这比我最初想象的要复杂得多。
希望我现在解释得足够清楚。
非常感谢你们的帮助!
-克雷格
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:06 , Processed in 0.515617 second(s), 74 queries .

© 2020-2025 乐筑天下

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