wkai 发表于 2005-9-30 17:20:10

[LISP函数]:文件操作函数


;;from wkai [www.xdcad.net]
;;20050930
;;功能   :将文本文件读入表中
;;参数fn :文件名
;;返回值 :文件内容表
;;示例:(xdl-file->lst "c:\\1.txt")
(defun xdl-file->lst(fn / re f LINE)
(setq f (open fn "r"))
(while (setq line (read-line f))
    (setq re (cons line re))
    )
(close f)
(reverse re)
)


;;from wkai [www.xdcad.net]
;;20050930
;;功能   :将字符串表写入文本文件
;;参数lst:字符串表
;;    fn :要写入的文件名
;;返回值 :无
;;示例:(xdl-lst->file '("第一行""第二行") "c:\\1.txt")
(defun xdl-lst->file(lst fn / f x)
(setq f (open fn "w"))
(mapcar '(lambda(x)(write-line x f)) lst)
(close f)
)


;;from wkai [www.xdcad.net]
;;20050930
;;功能   :替换文本文件中的部分文本
;;参数newstr:替换文本
;;    oldstr:被替换文本
;;   file :被操作的文件
;;返回值 :替换次数
;;示例:(xdl-file-substr "第一行" "这是替换后的第一行" "c:\\1.txt")
(defun xdl-file-substr(oldstr newstr   file / RE count)
(setq        lst    (xdl-file->lst file)
        oldstr1 (strcat "*" oldstr "*")
        count 0
)
(foreach nlst
    (if        (wcmatch n oldstr1)
      (setq n          (vl-string-subst newstr oldstr n)
          count (1+ count)
          )
      )
    (SETQ RE (CONS N RE))
    )
(xdl-lst->file (REVERSE re) file)
count
)


;;from wkai [www.xdcad.net]
;;20050930
;;功能   :替换多个文本文件中的文本
;;参数newstr:替换文本
;;    oldstr:被替换文本
;;filelst:目标文件文件名或者文件名列表
;;返回值 :被替换的文件个数
;;示例:(xdl-file-substr-m "这是替换后的第一行" "第一行"'("c:\\1.lsp" "c:\\2.txt"))
(defun xdl-file-substr-m (old newfilelst / files n count)
(setq count 0)
(if (listp filelst)()(setq files(list filelst)))
(foreach n filelst
    (if ( > (xdl-file-substr old newn) 0) (setq count (1+ count)))
)
   


;;from wkai [www.xdcad.net]
;;20050930
;;功能   :获取某路径下所有符合样本的文件名表
;;参数path:路径
;; pattern:文件名样本
;;返回值 :文件名表
;;示例:(xdl-file-allinfolder"c:" "*.exe" t)
(defun xdl-file-allinfolder(path pattern sub / n re)
(setq p (cddr(mapcar '(lambda(x)(strcat path "\\" x))(vl-directory-filespath "*" 0))))
(foreach n p
    (if (vl-file-directory-p n)
      (if sub (setq re (append (xdl-file-allinfoldern PATTERN sub) re)))
      (if (wcmatch (strcat (vl-filename-base n)
                           (if (vl-filename-extension n)
                             (vl-filename-extension n)
                             ""
                           )
                   )
                   pattern
          )
        (setq re (cons n re))
      )
    )
)
re
)


;;from wkai [www.xdcad.net]
;;20050930
;;功能   :选择一个文件夹,可以创建新文件夹
;;参数msg:提示信息
;;返回值 :文件夹路径
;;示例:(xdl-file-getfolder "选择一个文件夹")
(defun xdl-file-getfolder (msg / WinShell shFolder path catchit)
(vl-load-com)
(setq winshell (vlax-create-object "Shell.Application"))
(setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 255))
(setq
    catchit (vl-catch-all-apply
              '(lambda ()
               (setq shFolder (vlax-get-property shFolder 'self))
               (setq path (vlax-get-property shFolder 'path))
             )
          )
)
(if (vl-catch-all-error-p catchit)
    nil
    path
)
)

jyzas 发表于 2013-8-11 10:02:39

不错,支持楼主:)

123523058 发表于 2013-10-27 20:52:09

挺多的函数 不错 用用看看

dnbcgrass 发表于 2013-10-27 22:16:10

下来学习学习!

lianghui2018 发表于 2014-3-23 21:36:57

谢谢楼主分享

yoyoho 发表于 2014-6-11 16:31:20

谢谢楼主分享

bloodtempt 发表于 2014-12-10 15:12:30


楼主辛苦了,谢谢分享

bloodtempt 发表于 2014-12-10 15:20:38


楼主辛苦了,谢谢分享

laiz3000 发表于 2015-5-11 07:58:31

很全面的说:)

cq_qg68 发表于 2016-11-9 22:47:31

(xdl-file-getfolder "选择一个文件夹")
运行为何显示参数错误?

7325pink 发表于 2018-4-2 07:31:53

{:1_1:}谢谢分享!拜读了!

alhope 发表于 2020-2-14 09:37:26

非常感谢作者的分享!

MUYIY 发表于 2022-6-8 07:49:48

感谢分享,{:1_1:}{:1_1:}{:1_1:}
页: [1]
查看完整版本: [LISP函数]:文件操作函数