明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3224|回复: 8

[提问] 如何使用LISP程序读入已编写好的记事本文档来建立图层

[复制链接]
发表于 2017-10-24 18:31 | 显示全部楼层 |阅读模式
1.使用记事本编写好自已想要建立的图层名称、颜色、线型、线宽、打印比例。
2.如何编写LISP程序读入此命名的记事本文档,且按记事本里编写好名称来建立绘图图层?
发表于 2017-10-24 19:09 | 显示全部楼层
思路是这样,先读文本文件(注意格式),生成表。再由表内定义来建图层!
发表于 2017-10-24 19:26 | 显示全部楼层
本帖最后由 xiaolong1487 于 2017-10-25 08:54 编辑

这个是test.txt的内容,图层名,颜色。需要什么自己加,自己改
a001 1
a002 2
a003 3

  1. ;;84.17 [功能] 读文本文件到表 (快于 AutoLISP read-line函数)
  2. ;;用法: (vldos-readfile FilenameToRead[STRING] )
  3. ;;  参数1: 文本文件全路径名. (包括后缀名)
  4. ;;        只有文本文件才能返回正确结果.
  5. ;;返回值: 返回包括文件内容的表 or NIL
  6. (Defun vldos-readfile
  7.         (Fil / string->list FilObj FilPth FilSys OpnFil All)
  8.   (Defun string->list (String / ID Rtn)
  9.     (if        (null (setq ID (vl-string-search "\r\n" String)))
  10.       (setq Rtn (list String))
  11.       (progn
  12.                                 (while ID
  13.                                         (setq        Rtn    (cons (substr String 1 ID) Rtn)
  14.                                                 String (substr String (+ 3 ID))
  15.                                                 ID     (vl-string-search "\r\n" String)
  16.                                         )
  17.                                 )
  18.                                 (setq Rtn (reverse (cons String Rtn)))
  19.       )
  20.     )
  21.     Rtn
  22.   )
  23.   (if (AND (setq FilPth (findfile Fil))
  24.                                 (setq FilSys (vlax-create-object "Scripting.FileSystemObject"))
  25.       )
  26.     (progn
  27.       (setq FilObj (vlax-invoke FilSys "GetFile" FilPth)
  28.                                 OpnFil (vlax-invoke FilObj "OpenAsTextStream" 1 0)
  29.                                 All           (string->list (vlax-invoke OpnFil "readall"))
  30.       )
  31.       (vlax-invoke OpnFil "Close")
  32.       (vlax-release-object OpnFil)
  33.       (vlax-release-object FilObj)
  34.       (vlax-release-object FilSys)
  35.     )
  36.   )
  37.   All
  38. )

  39. ;|
  40. ;;http://www.xdcad.net/forum/thread-669166-1-2.html By XDSoft
  41. 功能 对字符串进行正则表达式匹配测试.
  42. pat = 正则表达式模式 ,对应vbs正则表达式的模式(expression)。说明: \\号要用\\\\替代.
  43. str = 字符串
  44. key = "i" "g" "m" , "i"不区分大小写(Ignorecase),"g"全局匹配(Global).
  45. "m"多行模式(Multiline),以上几个关键字可以组合使用,或用 "".
  46. 返回: 返回匹配的字符列表,或无一匹配返回nil
  47. |;
  48. ;;47.1 [功能] 字符串分割(正则表达式)
  49. (defun XD::String:RegExpS (pat str key / end keys matches x)
  50.   (if (not *xxvbsexp)
  51.     (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
  52.   )
  53.   (vlax-put *xxvbsexp 'Pattern pat)
  54.   (if (not key)
  55.     (setq key "")
  56.   )
  57.   (setq key (strcase key))
  58.   (setq        keys '(("I" "IgnoreCase")
  59.                                                                 ("G" "Global")
  60.                                                                 ("M" "Multiline")
  61.                                                         )
  62.   )
  63.   (mapcar
  64.     '(lambda (x)
  65.        (if (wcmatch key (strcat "*" (car x) "*"))
  66.                                  (vlax-put *xxvbsexp (read (cadr x)) 0)
  67.                                  (vlax-put *xxvbsexp (read (cadr x)) -1)
  68.        )
  69.      )
  70.     keys
  71.   )
  72.   (setq matches (vlax-invoke *xxvbsexp 'Execute str))
  73.   (vlax-for x matches (setq end (cons (vla-get-value x) end)))
  74.   (reverse end)
  75. )

  76. (defun c:ts ()
  77.         (if (setq lst (vldos-readfile "c:\\test.txt"))
  78.                 (progn
  79.                         (foreach str lst
  80.                                 (setq lst1 (xd::string:regexps "[^\\s]+" str ""))
  81.                                 (command "-layer" "n" (car lst1) "c" (cadr lst1) (car lst1) "" )
  82.                         )
  83.                 )
  84.         )
  85. )
 楼主| 发表于 2017-10-25 07:50 | 显示全部楼层
谢谢你的建义及实例程序,但我还是没理解你给我写的这段程序,我先看明白后自已再偿试来学习做一遍,非常感谢
发表于 2017-10-25 08:07 | 显示全部楼层
本帖最后由 davide888 于 2017-10-25 08:11 编辑

论坛有人发过的;;创建图层
(defun C:xwy( / tt f txt tm cl xx xk)
(setvar "cmdecho" 0)
(setq tt (findfile "定义图层.txt"))
(setq f (open tt "r"))
(read-line f )
(while (setq txt (read-line f))
       (setq tm (substr txt 1 20))
       (setq cl (substr txt 21 3))
       (setq xx (substr txt 29 10))
       (setq xk (substr txt 44 4))
(command "_layer" "n" tm "c" cl tm "l" xx tm "lw" xk tm "") )
   (PRINC "图层加载OK"))



文本名称  定义图层.txt
//模板图层          颜色    线型           线宽
标注                    008     CONTINUOUS     0.10
填充                    250     CONTINUOUS     0.05


因为是读取字符位置,所以要对齐位置。
发表于 2017-10-25 08:52 | 显示全部楼层
pchuangzmx 发表于 2017-10-25 07:50
谢谢你的建义及实例程序,但我还是没理解你给我写的这段程序,我先看明白后自已再偿试来学习做一遍,非常感 ...

这个是test.txt的内容,图层名,颜色。需要什么自己加,自己改
a001 1
a002 2
a003 3
发表于 2017-10-25 09:20 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
发表于 2021-2-2 21:59 | 显示全部楼层
感谢楼主的无私分享 谢谢
发表于 2022-7-30 20:31 | 显示全部楼层
感谢楼主的无私分享 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-3-29 23:37 , Processed in 0.162729 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表