在我的工作过程中发现了这个由马克·梅西尔(MarkMercier)又称Freerefill)编写的“查找文本”lisp。
http://www.cadtutor.net/forum/showthread.php?35933-有史以来最好的文本查找和替换LISP。。。
我猜他不再浏览这里了。
我发现它非常有用&没有对话框,速度很快,因为它会减慢我的速度。正在使用autocad find命令&与此相比,速度要快得多。
我看到了它可以进一步提高的潜力,尤其是在速度方面。
因此,我想知道是否有人可以帮助调整lisp,以便:-
1) “查找”可以是默认选择。
因此,在运行命令后,我们可以开始键入我们想要查找的单词。
2) 它可以搜索整个单词
目前,它似乎像一个通配符一样搜索文本,我不得不循环浏览。我想这将是一个很好的选择,但只有当把*。
我希望它可以调整为默认情况下搜索整个单词。
老实说,这是一个非常好的Lisp程序。
希望有能力的人能看到它的潜力和改进建议
谢谢
这是代码
- ;-============-;
- ;- Text Find -;
- ;- *~* -;
- ; Written by -;
- ; Mark Mercier ;
- ; 05-06-09 ;
- ;-============-;
- ; Improvements:
- ; Text within blocks
- ; Improved selection set.. maybe do away with the whole "list" thing and go straight VLA
- (defun c:tfind()
- (tfindfun nil nil 0)
- )
- (defun tfindfun(inputF inputR caseSn / goto goWhile strinF strinR selSet selTxt searep case count error)
- ; 01 Create selection set. GOTO 02 if success, or GOTO 08 if fail
- ; 02 Check passed input. If both nil, GOTO 03. If first string and second nil, GOTO 06. If both strings, GOTO 07. Otherwise, return error and GOTO 08
- ; 03 Display menus and obtain data from user. If Search, GOTO 04. If Replace, GOTO 05
- ; 04 Search option selected. Prompt user for single search term. GOTO 06
- ; 05 Replace option selected. Prompt user for search term and replace term. GOTO 07
- ; 06 One string has been passed. Assume automatic search. Run same as current (tfind). GOTO FINISH
- ; 07 Two strings have been passed. Assume automatic replace. Pass both strings to (replace) function. GOTO FINISH
- ; 08 FINISH. Return errors if needed. End loop and program.
- (vl-load-com)
- (setq goTo 1)
- (setq goWhile 1)
- (setq count 0)
- (if (not (mlml (list caseSn) (list 0 1))) (progn (setq goWhile nil) (princ "\nCase selection not recognized.")))
- (if (= caseSn 0) (setq case "N") (setq case "Y"))
- (while goWhile
- (cond
- ((= goTo 1)
- (setq selSet (extTxtPt (ssget "_X" (list (cons -4 "<OR") (cons 0 "TEXT,MTEXT") (cons -4 "<AND") (cons 0 "INSERT") (cons 66 1) (cons -4 "AND>") (cons -4 "OR>")))))
- (if selSet (setq goTo 2) (setq error "\nSelection set not found." goTo )
- )
- ((= goTo 2)
- ; Check input, pass to whatever.
- (cond
- ((and (= inputF nil) (= inputR nil))
- (setq goTo 3)
- )
- ((and (= (type inputF) 'STR) (= inputR nil))
- (setq strinF inputF)
- (setq goTo 6)
- )
- ((and (= (type inputF) 'STR) (= (type inputR) 'STR))
- (setq strinF inputF)
- (setq strinR inputR)
- (setq goTo 7)
- )
- (t
- (setq error "\nPassed arguments are not accepted.")
- (setq goTo
- )
- )
- )
- ((= goTo 3)
- ; Obtain desired option from user
- (while (not (mlml (list (setq searep (strcase (getstring nil "\nSelect option [Find/Replace/Quit/Case]: "))))
- (list "F" "FIND" "R" "REPLACE" "Q" "QUIT" "C" "CASE")
- ))
- )
- (cond
- ((mlml (list searep) (list "F" "FIND"))
- (setq goTo 4)
- )
- ((mlml (list searep) (list "R" "REPLACE"))
- (setq goTo 5)
- )
- ((mlml (list searep) (list "Q" "QUIT"))
- (setq goTo
- )
- ((mlml (list searep) (list "C" "CASE"))
- (while (not (mlml (list (setq case (strcase (getstring nil "\nCase sensitive? [Yes/No]: "))))
- (list "Y" "YES" "N" "NO")
- ))
- )
- )
- )
- )
- ((= goTo 4)
- ; Obtain search string from user, set to strinF
- (while (eq "" (setq strinF (getstring T "\nEnter search term: "))))
- (setq goTo 6)
- )
- ((= goTo 5)
- ; Obtain search string and replace string from user, set to strinF and strinR respectively
- (while (eq "" (setq strinF (getstring T "\nEnter find term: "))))
- (while (eq "" (setq strinR (getstring T "\nEnter replace term: "))))
- (setq goTo 7)
- )
- ((= goTo 6)
- ; Search drawing for strinF
- (cond
- ((mlml (list case) (list "Y" "YES"))
- ; Compare using (vl-string-search strinF input), view selection
- ; use "while" to get all search occurances
- (foreach selVar selSet
- (if (vl-string-search strinF (nth 0 selVar))
- (progn
- (setq count (1+ count))
- (if (/= (getvar "ctab") (caddr selVar)) (command "ctab" (caddr selVar)))
- (command "zoom" "c" (trans (cadr selVar) 0 1) (* 32 (nth 3 selVar)))
- (getstring "\nPress 'Enter' to continue: ")
- )
- )
- )
- )
- ((mlml (list case) (list "N" "NO"))
- ; Compare using (vl-string-search (strcase strinF) (strcase input)), view selection
- ; use "while" to get all search occurances
- (foreach selVar selSet
- (if (vl-string-search (strcase strinF) (strcase (nth 0 selVar)))
- (progn
- (setq count (1+ count))
|