简单的文件查找问题(已解决)
本帖最后由 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还没有入门。
各位请指教 找到几个相关的网站
http://www.dwg.net.ru/dwglocate.exe
http://www.dynamo15.narod.ru/dwgfind.exe
http://www.dynamo15.narod.ru/dwgfind.htm
无法下载 这个应该是个很不简单的问题,
以前用过谷歌的桌面搜索,速度可以不过还是有漏网之鱼
帮楼主顶一下,期待大神出手解决 本帖最后由 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 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
)
还是不全,图块内文字搜索代码有问题......
用块内递归搞定,可能是用dbx原因速度有些慢;
搞不懂,,路过,
楼主可否把完整源码发给我,这个我也需要,simpleye@126.com
页:
[1]