pchuangzmx 发表于 2017-10-24 18:31:34

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

1.使用记事本编写好自已想要建立的图层名称、颜色、线型、线宽、打印比例。
2.如何编写LISP程序读入此命名的记事本文档,且按记事本里编写好名称来建立绘图图层?

xiaolong1487 发表于 2017-10-24 19:09:47

思路是这样,先读文本文件(注意格式),生成表。再由表内定义来建图层!

xiaolong1487 发表于 2017-10-24 19:26:06

本帖最后由 xiaolong1487 于 2017-10-25 08:54 编辑

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

;;84.17 [功能] 读文本文件到表 (快于 AutoLISP read-line函数)
;;用法: (vldos-readfile FilenameToRead )
;;参数1: 文本文件全路径名. (包括后缀名)
;;      只有文本文件才能返回正确结果.
;;返回值: 返回包括文件内容的表 or NIL
(Defun vldos-readfile
      (Fil / string->list FilObj FilPth FilSys OpnFil All)
(Defun string->list (String / ID Rtn)
    (if      (null (setq ID (vl-string-search "\r\n" String)))
      (setq Rtn (list String))
      (progn
                              (while ID
                                        (setq      Rtn    (cons (substr String 1 ID) Rtn)
                                                String (substr String (+ 3 ID))
                                                ID   (vl-string-search "\r\n" String)
                                        )
                              )
                              (setq Rtn (reverse (cons String Rtn)))
      )
    )
    Rtn
)
(if (AND (setq FilPth (findfile Fil))
                              (setq FilSys (vlax-create-object "Scripting.FileSystemObject"))
      )
    (progn
      (setq FilObj (vlax-invoke FilSys "GetFile" FilPth)
                              OpnFil (vlax-invoke FilObj "OpenAsTextStream" 1 0)
                              All         (string->list (vlax-invoke OpnFil "readall"))
      )
      (vlax-invoke OpnFil "Close")
      (vlax-release-object OpnFil)
      (vlax-release-object FilObj)
      (vlax-release-object FilSys)
    )
)
All
)

;|
;;http://www.xdcad.net/forum/thread-669166-1-2.html By XDSoft
功能 对字符串进行正则表达式匹配测试.
pat = 正则表达式模式 ,对应vbs正则表达式的模式(expression)。说明: \\号要用\\\\替代.
str = 字符串
key = \"i\" \"g\" \"m\" , \"i\"不区分大小写(Ignorecase),\"g\"全局匹配(Global).
\"m\"多行模式(Multiline),以上几个关键字可以组合使用,或用 \"\".
返回: 返回匹配的字符列表,或无一匹配返回nil
|;
;;47.1 [功能] 字符串分割(正则表达式)
(defun XD::String:RegExpS (pat str key / end keys matches x)
(if (not *xxvbsexp)
    (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
)
(vlax-put *xxvbsexp 'Pattern pat)
(if (not key)
    (setq key "")
)
(setq key (strcase key))
(setq      keys '(("I" "IgnoreCase")
                                                                ("G" "Global")
                                                                ("M" "Multiline")
                                                      )
)
(mapcar
    '(lambda (x)
       (if (wcmatch key (strcat "*" (car x) "*"))
                                 (vlax-put *xxvbsexp (read (cadr x)) 0)
                                 (vlax-put *xxvbsexp (read (cadr x)) -1)
       )
   )
    keys
)
(setq matches (vlax-invoke *xxvbsexp 'Execute str))
(vlax-for x matches (setq end (cons (vla-get-value x) end)))
(reverse end)
)

(defun c:ts ()
      (if (setq lst (vldos-readfile "c:\\test.txt"))
                (progn
                        (foreach str lst
                              (setq lst1 (xd::string:regexps "[^\\s]+" str ""))
                              (command "-layer" "n" (car lst1) "c" (cadr lst1) (car lst1) "" )
                        )
                )
      )
)

pchuangzmx 发表于 2017-10-25 07:50:35

谢谢你的建义及实例程序,但我还是没理解你给我写的这段程序,我先看明白后自已再偿试来学习做一遍,非常感谢

davide888 发表于 2017-10-25 08:07:11

本帖最后由 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


因为是读取字符位置,所以要对齐位置。

xiaolong1487 发表于 2017-10-25 08:52:40

pchuangzmx 发表于 2017-10-25 07:50
谢谢你的建义及实例程序,但我还是没理解你给我写的这段程序,我先看明白后自已再偿试来学习做一遍,非常感 ...

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

pengfei2010 发表于 2017-10-25 09:20:01

回帖是一种美德!感谢楼主的无私分享 谢谢

趣意人生 发表于 2021-2-2 21:59:48

感谢楼主的无私分享 谢谢

ZYX2129 发表于 2022-7-30 20:31:47

感谢楼主的无私分享 谢谢
页: [1]
查看完整版本: 如何使用LISP程序读入已编写好的记事本文档来建立图层