jack093 发表于 2013-6-5 10:32:24

简单的文件查找问题(已解决)

本帖最后由 jack093 于 2013-6-15 21:28 编辑

如何在指定磁盘或目录下查找包含某一字符串的文件?
http://bbs.csdn.net/topics/290082370
http://zhidao.baidu.com/question ... =qrl&cid=87&index=3
windows的文件查找只能查找包含字符串的excel word等文件,dwg文件部分能查找到,速度非常慢,跟重要的是有漏网之鱼,无法依赖它。
设计中心也没有这个功能。
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=86815
这个帖子简单修改一下就可以了,可惜本人dbx还没有入门。
各位请指教

jack093 发表于 2013-6-5 11:13:41

找到几个相关的网站

http://www.dwg.net.ru/dwglocate.exe
http://www.dynamo15.narod.ru/dwgfind.exe

http://www.dynamo15.narod.ru/dwgfind.htm
无法下载

hhhlike 发表于 2013-6-5 14:34:09

这个应该是个很不简单的问题,
以前用过谷歌的桌面搜索,速度可以不过还是有漏网之鱼
帮楼主顶一下,期待大神出手解决

jack093 发表于 2013-6-5 18:09:40

本帖最后由 jack093 于 2013-6-5 18:23 编辑

windows的文件查找,漏掉的部分没有发现规律;
按照desk公司的论坛帖子修改的只搜索了模型空间,遗漏图纸空间
http://forums.autodesk.com/t5/Vi ... de-dwg/td-p/1315426

    (vlax-for for-item (vla-get-modelspace dbxDoc)
      (progn ; start of object cycle
            (setq name (vla-get-objectname for-item))
上述用到了vla-get-modelspace,
请教高手:
1.不知道有没有函数可以全部空间都遍历到,还要用vla-get-paperspace吗?
2.如果用vla-get-paperspace,是否又要一个一个布局去找?

砍刀大侠的mcht没有用的这两个函数直接搞定,水平有限实在看不懂
dbx实在不熟。期待大侠出手

jack093 发表于 2013-6-5 19:06:51

本帖最后由 jack093 于 2013-6-5 20:03 编辑

可以了,不过有点傻,是否有更好的办法?
vlax-for 是循环语句吧,能否满足条件是直接退出呢
    (vlax-for for-item (vla-get-modelspace dbxDoc)
      (progn ; start of object cycle
            (setq name (vla-get-objectname for-item))
....
)))
    (vlax-for for-item (vla-get-paperspace dbxDoc)
      (progn ; start of object cycle
            (setq name (vla-get-objectname for-item))
...
)))

-----------------------------------------------------------------------------------------


(defun findtext_dwg (dwgname string / dbxDoc for-item name layer llist ob line ret)
    (setq ret nil)
    (if (and (not (vl-registry-read
                  "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument.18\\CLSID"
                )
            )
            (findfile "axdb18.dll")
      )
      (startapp "regsvr32.exe"
            (strcat "/s \"" (findfile "axdb18.dll") "\"")
      )
    )
    (setq dbxDoc
      (vla-GetInterfaceObject
            (vlax-get-acad-object)
            "ObjectDBX.AxDbDocument.18"
            ; MUST reference autocad DBX version
      )
    )
    (vla-open dbxDoc DwgName)
    (vlax-for for-item (vla-get-modelspace dbxDoc)
      (setq ret(tt_vla_object for-item dwgname string ret))
    )
    (if (null ret)
      (vlax-for for-item (vla-get-paperspace dbxDoc)
            (setq ret(tt_vla_object for-item dwgname string ret))
      )
    )
;|
    (if (null ret)
      (if (setq blks (vla-get-blocks dbxDoc))
            (vlax-for for-item blks
                (setq ret(tt_vla_object for-item dwgname string ret))
            )
      )
    )
|;
    (vl-catch-all-apply
      '(lambda () (vla-close DBXDOC ':VLAX-TRUE 'ITEM))
    )
    (VL-CATCH-ALL-APPLY
      'vlax-release-object
      (list dbxDoc dwgname for-item name layer llist ob line string )
    )
    (vlax-release-object dbxDoc)
    (setq dbxDoc nil)
    ret
)

(defun tt_vla_object(for-item dwgname string ret /line )
    (if (null ret)
      (if (wcmatch (vla-get-objectname for-item) "AcDb*Text")
            (progn
                ;Conditions
                (if (vlax-property-available-p for-item 'textstring)
                  (setq line (vla-get-textstring for-item))
                )
                (if line
                  (Progn
                        (if (wcmatch (strcase line) (strcat "*" (strcase string) "*"))
                            (progn
                              (setq ret dwgname)
                              (prompt (strcat "\n" dwgname))
                              (prompt (strcat "\n" line))
                            )
                        )
                  )))
      )
    )
    ; (if
    ; (= name "AcDbBlockReference")
    ; (progn
    ; ;Conditions
    ; )
    ; )
    ret
)

还是不全,图块内文字搜索代码有问题......

jack093 发表于 2013-6-7 10:43:06

用块内递归搞定,可能是用dbx原因速度有些慢;

xiabin68 发表于 2013-6-7 12:45:15

搞不懂,,路过,

simpleye 发表于 2013-11-20 15:46:59

楼主可否把完整源码发给我,这个我也需要,simpleye@126.com
页: [1]
查看完整版本: 简单的文件查找问题(已解决)