ymcui 发表于 2014-7-10 09:54:34

求助:修改开金工具的文字查找

本帖最后由 ymcui 于 2014-7-10 09:56 编辑


*fr:dialog{
label="《開金工具箱》--(查找/替换)文字功能(适用于text、mtext)";
spacer;
:column{
    :boxed_row{
      :text_part{
      label="查找文字:";
      key="cz";
      }
      :edit_box{
      key="text_find";
      edit_limit=80;
      edit_width=65;
      value="";
      }
    }
    :boxed_row{
      :text_part{
      label="替换为:";
      key="th";
      }
   
      :edit_box{
      key="text_replace";
      edit_limit=80;
      edit_width=65;
      value="";
      }
    }
    spacer;
    :boxed_row{
      :button{
      label="查找";
      key="select";
      }
    }
    :boxed_row{
      :text_part{
      label="-->共找到()组字符";
      key="t3";
      }
      :button{
      label="缩放为(ZOOM)-->";
      key="selecta";
      }
    }
    :boxed_row{
      :button{
      label="修改";
      key="selectb";
      }
      :button{
      label="全部修改";
      key="selectc";
      }
    }
}
initial_focus=text_find;
spacer;
ok_cancel;
}

注:程序点击缩放时,点一次自动缩放下一个字符.谢谢;查找/替换文字
(defun c:KJ_WTH(/ msg_1 msg_2 dcl_file dcl_flag text_f text_r single ob_list ob_number

temp text_code
      text_o text_e text_h length_e length_f total_o total_t text_s text_c)
   (setvar "cmdecho" 0) ;指令执行过程不响应
   (PRINC "\n【開金工具箱】---查找/替换文字功能")
(princ "\n-->请框选要查找替换的区域.....")
(defun dcl()
    (setq dcl_file "fr")
    (setq dcl_flag (load_dialog dcl_file))
    (if (< dcl_flag 0) (exit))
    (if (not (new_dialog "fr" dcl_flag)) (exit))
    (set_tile "text_find" text_f)
      (set_tile "text_replace" text_r)
    (action_tile "text_find" "(setq text_f $$$$$$$$$$$$$$$$value)")
      (action_tile "text_replace" "(setq text_r $$$$$$$$$$$$$$$$value)")
    (action_tile "select" "(done_dialog 2)")
    (action_tile "selecta" "(done_dialog 3)")
    (action_tile "selectb" "(done_dialog 4)")
    (action_tile "selectc" "(done_dialog 5)")
    (action_tile "accept" "(do)")
    (action_tile "cancel" "(done_dialog 0)")
    (setq signal (start_dialog))
    (if (= signal 2)
      (setq ob_list (SSGET "x" '((0 . "*TEXT"))))
    )
    (if (= signal 3)
      (command "zoom" "o" text_f "")
    )
    (if (= signal 4)
      (command "zoom" "o" text_f "")
    )
    (if (= signal 5)
      (command "zoom" "o" text_f "")
    )
)


(defun do()
    (cond
      ((= ob_list nil) (princ "\n未选择目标区域\n"))
      ((= text_f "") (princ "\n未输入目标字符\n"))
      ((= text_r "") (princ "\n未输入替代字符\n"))      
      ((and (and (/= ob_list nil) (/= text_r "")) (/= text_f ""))

(main))
    )
)

(defun main()
    (setq ob_number (sslength ob_list))
    (setq temp 1)      
    (setq total_o 0)
    (setq total_t 0)
    (repeat ob_number
      (setq text_code (entget (ssname ob_list (- temp 1))))
      (if
      (or (= "TEXT" (cdr (assoc 0 text_code)))
            (= "MTEXT" (cdr (assoc 0 text_code)))
      )
      (progn
          (setq text_o (cdr (assoc 1 (entget (ssname ob_list (- temp

1))))))
          (setq text_e text_o)
          (setq text_h "")
          (setq length_e (strlen text_e))
          (setq length_f (strlen text_f))
          (while
            (and (<= length_f length_e) (/= length_e 0))
            (setq text_s (substr text_e 1 length_f))
            (if
      (= text_s text_f)
      (progn
          (setq text_h (strcat text_h text_r))
          (setq text_e (substr text_e (+ length_f 1)))
          (setq total_t (+ total_t 1))
      )
      (progn
          (setq text_s (substr text_e 1 1))
          (setq text_h (strcat text_h text_s))
          (setq text_e (substr text_e 2))
      )
                  )
            (setq length_e (strlen text_e))
          )
          (setq text_c (strcat text_h text_e))
          (if
            (/= text_c text_o)
            (progn
            (setq text_code (subst (cons 1 text_c) (assoc 1

text_code) text_code))
            (entmod text_code)
      (setq total_o (+ total_o 1))
            )      
          )
      )
      )
      (setq temp (+ 1 temp))
    )
    (done_dialog 1)
)


(setq text_r "")
    (setq text_f "")
(dcl)
(while (= signal 2) (dcl))
    (if (/= signal 0)
    (progn      
      (princ "\n★★★欢迎使用--《開金工具箱》--★★★      共修改了

")
      (princ total_t)
      (princ "个文字")
    )
)
(unload_dialog dcl_flag)
(prin1)
)
页: [1]
查看完整版本: 求助:修改开金工具的文字查找