明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2563|回复: 15

关于LISP的搜索

  [复制链接]
发表于 2008-11-25 15:57:00 | 显示全部楼层 |阅读模式

各位大哥们,LISP能不能实现全盘的搜索东西,并且搜索的每一个东西都用PRINT 显示一下,

发表于 2008-11-25 16:02:00 | 显示全部楼层

搜索什么?

 楼主| 发表于 2008-11-25 16:22:00 | 显示全部楼层
比如我要全盘搜索ACAD。LSP,应该怎么实现呢,
发表于 2008-11-25 16:51:00 | 显示全部楼层
vl-directory-files
 楼主| 发表于 2008-11-25 16:55:00 | 显示全部楼层
怎么使用,CAOYIN大哥,能否举个例子,
 楼主| 发表于 2008-11-25 17:03:00 | 显示全部楼层
关键是我怎么来实现全盘搜索呢
发表于 2008-11-25 17:10:00 | 显示全部楼层

这是很久前写的,凑合着用吧

;; [功能] 在指定路径中列出指定类型文件列表
;; [参数] dir------要搜索的文件夹路径
;;        filtyp---部分或全部匹配的文件名 (如:"longfin.*" "acad*" "acad*.lsp" "*rm*" "*.fas" 等)
;;        subdir---为 T 时搜索子目录
;; [测试] (lt:file-search "*.lsp" T)
(defun lt:file-search (dir filtyp subdir / dirlst fillst)
  (setq dirlst (list dir))
  (if (= subdir T)
    (while dirlst
      (if (setq dir (car dirlst))
        (setq dir    (lt:path-addBackSlash dir)
              fillst (append fillst
                             (mapcar '(lambda (x) (strcat dir x))
                                     (vl-directory-files dir filtyp 1)
                             )
                     )
              dirlst (append (cdr dirlst)
                             (mapcar '(lambda (x) (strcat dir x))
                                     (vl-remove-if '(lambda (x) (member x '("." "..")))
                                                   (vl-directory-files dir nil -1)
                                     )
                             )
                     )
        )
        (setq dirlst nil)
      )
    )
    (setq fillst (mapcar '(lambda (x) (strcat dir x)) (vl-directory-files dir filtyp 1)))
  )
  (acad_strlsort fillst)
)

(defun lt:path-addBackSlash (path)
  (setq path (lt:str-subst "\\" "/" path))
  (if (/= (substr path (strlen path)) "\\")
    (strcat path "\\")
    path
  )
)

发表于 2008-11-25 17:13:00 | 显示全部楼层
(vl-directory-files  [directory pattern directories])

功能

   列出给定目录中的所有文件。

说明

    1)参数 directory 为字符串,指定要收集文件的目录。若未指定该参数或参数为 nil,那么vl-directory-files 使用当前目录。

    2)参数 pattern 为字符串,包含文件名的 DOS 方式。如果未指定该参数或参数为 nil,vl-directory-files 假定为 "*.*"。

    3)directories 为整数型,指定返回的表中是否包含路径名。可以指定下列值之一:

-1  仅列出目录。

0   列出文件和目录(缺省值)。

1   仅列出文件。

返回值:

 文件和路径列表。若没有符合指定方式的文件,则返回 nil。

样例:

1)_$ (vl-directory-files "c:/acadwin" "acad*.exe")

("ACAD.EXE" "ACADAPP.EXE" "ACADL.EXE" "ACADPS.EXE")

2)_$ (vl-directory-files "d:/acadwin" nil -1)

("." ".." "SUPPORT" "SAMPLE" "ADS" "FONTS" "IGESFONT" "SOURCE" "ASE")

3)_$ (vl-directory-files "d:/acad13c4" nil -1)

("." ".." "WIN" "COM" "DOS")

发表于 2008-11-25 17:38:00 | 显示全部楼层

向各位学习了,谢谢!

 楼主| 发表于 2008-11-25 18:01:00 | 显示全部楼层

太厉害了,CAOYIN大哥,向你学习

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

本版积分规则

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

GMT+8, 2025-7-30 05:26 , Processed in 0.188097 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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