lxdz443 发表于 2015-12-27 19:06:51

请教这个代码为什么无法选中数字?


(defun c:ee ( / apple_txt nl apple_nl apple_kkj apple_getstr apple_hb1 apple_hb0 apple_oldjd x y z apple_wz apple apple_wz1 zkh zkh1 apple_newjd obj qq nb nb1)
(vl-load-com)
(setq apple_txt nil nl nil apple_nl nil apple_kkj nil apple_getstr nil)
(if (ssget '((0 . "* text")))
    (vlax-for obj (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
      (setq apple_txt (cons(strcat(vla-get-textstring obj) "*")apple_txt))
      )
    )
(setq apple_hb (vl-catch-all-apply 'strcat apple_txt))
(while (vl-string-search "\\p" apple_hb)
    (setq apple_hb (vl-string-subst "*" "\\p" apple_hb))
    )
(setq apple_hb0 apple_hb)
(while
    (setq nb (vl-string-search "{" apple_hb)
          nb1 (vl-string-search "}" apple_hb))
          (setq nl (cons (substr apple_hb (+ nb 1)(- nb1 (- nb 1))) nl))
           (setq apple_hb (substr apple_hb (+ nb1 2)))
          )
    (setq apple_hb1 (vl-catch-all-apply 'strcat nl))
    (mapcar
      '(lambda (x)
       (setq apple_hb0 (vl-string-subst " " x apple_hb0))
       ) nl
      )
    (while
      (setq apple_wz (vl-string-search ";" apple_hb1))
      (setq apple_hb1 (substr apple_hb1 (+ apple_wz 2)))
      (setq zkh (vl-string-search "}" apple_hb1))
      (setq zkh1 (vl-string-search "\\" apple_hb1)
          )
      (cond
        ((null zkh1)(setq qq zkh))
        (t (setq qq (min zkh zkh1)))
        )
      (setq apple_nl (cons (substr apple_hb1 1 (+ qq 1)) apple_nl))
      (setq apple_hb1 (substr apple_hb1 (+ qq 2)))
      )
    (setq apple_nl (cons apple_hb0 apple_nl))
    (setq apple_nl (vl-catch-all-apply 'strcat apple_nl))
    (mapcar '(lambda (y)
             (if (not(or(and(<= y 57)(>= y 48)) (= y 46) (= y 45)))
                  (setq y 32))
                (setq apple_kkj (cons y apple_kkj)))
             (vl-string->list apple_nl)
             )
        (setq apple_kkj (vl-string-trim " " (vl-list->string (reverse apple_kkj))))
        (while
              (setq apple_wz1 (vl-string-search " " apple_kkj))
              (setq apple_getstr (cons (substr apple_kkj 1 apple_wz1) apple_getstr))
              (setq apple_kkj (vl-string-trim " " (substr apple_kkj (+ apple_wz1 2))))
              )
   (setq apple_getstr
        (mapcar '(lambda (z)
        (atof z)
                   )
                (vl-remove "." (vl-remove "-"(cons apple_kkj apple_getstr))))
           )
    (setq apple_jsjg (vl-catch-all-apply '+ apple_getstr))
    (princ "\n&所选文字中数字的和为&:")
    (princ apple_jsjg)
    (cond ((null apple_oldjd) (setq apple_oldjd 2)))
    (initget 4)
    (setq apple_newjd (getint(strcat "\n&输入计算精度&<" (rtos apple_oldjd) ">")))
    (if (not apple_newjd)
      (setq apple_newjd apple_oldjd) (setq apple_oldjd apple_newjd)
      )
    (vl-cmdf ".text" (getpoint "\n&计算结果插入点&:")(getdist "\n&输入字高&:") " " (rtos apple_jsjg 2 apple_newjd))
    (princ)
    )

lxw320 发表于 2015-12-27 20:16:45

本帖最后由 lxw320 于 2015-12-27 20:19 编辑

((0 . "*text")) *与text间不能有空格
(defun c:ee ( / apple_txt nl apple_nl apple_kkj apple_getstr apple_hb1 apple_hb0 apple_oldjd x y z apple_wz apple apple_wz1 zkh zkh1 apple_newjd obj qq nb nb1)
      (vl-load-com)
      (setq apple_txt nil nl nil apple_nl nil apple_kkj nil apple_getstr nil)
      (if (ssget '((0 . "*text")))
                (vlax-for obj (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
                        (setq apple_txt (cons(strcat(vla-get-textstring obj) "*")apple_txt))
                )
      )
      (setq apple_hb (vl-catch-all-apply 'strcat apple_txt))
      (while (vl-string-search "\\p" apple_hb)
                (setq apple_hb (vl-string-subst "*" "\\p" apple_hb))
      )
(setq apple_hb0 apple_hb)
      (while
                (setq nb (vl-string-search "{" apple_hb)
                        nb1 (vl-string-search "}" apple_hb))
                (setq nl (cons (substr apple_hb (+ nb 1)(- nb1 (- nb 1))) nl))
                (setq apple_hb (substr apple_hb (+ nb1 2)))
      )
      (setq apple_hb1 (vl-catch-all-apply 'strcat nl))
      (mapcar
                '(lambda (x)
                         (setq apple_hb0 (vl-string-subst " " x apple_hb0))
               ) nl
      )
      (while
                (setq apple_wz (vl-string-search ";" apple_hb1))
                (setq apple_hb1 (substr apple_hb1 (+ apple_wz 2)))
                (setq zkh (vl-string-search "}" apple_hb1))
                (setq zkh1 (vl-string-search "\\" apple_hb1)
                )
                (cond
                        ((null zkh1)(setq qq zkh))
                        (t (setq qq (min zkh zkh1)))
                )
                (setq apple_nl (cons (substr apple_hb1 1 (+ qq 1)) apple_nl))
                (setq apple_hb1 (substr apple_hb1 (+ qq 2)))
      )
      (setq apple_nl (cons apple_hb0 apple_nl))
      (setq apple_nl (vl-catch-all-apply 'strcat apple_nl))
      (mapcar '(lambda (y)
                                                 (if (not(or(and(<= y 57)(>= y 48)) (= y 46) (= y 45)))
                                                         (setq y 32))
                                                 (setq apple_kkj (cons y apple_kkj)))
                (vl-string->list apple_nl)
      )
      (setq apple_kkj (vl-string-trim " " (vl-list->string (reverse apple_kkj))))
      (while
                (setq apple_wz1 (vl-string-search " " apple_kkj))
                (setq apple_getstr (cons (substr apple_kkj 1 apple_wz1) apple_getstr))
                (setq apple_kkj (vl-string-trim " " (substr apple_kkj (+ apple_wz1 2))))
      )
      (setq apple_getstr
                (mapcar '(lambda (z)
                                                         (atof z)
                                                 )
                        (vl-remove "." (vl-remove "-"(cons apple_kkj apple_getstr))))
      )
      (setq apple_jsjg (vl-catch-all-apply '+ apple_getstr))
      (princ "\n所选文字中数字的和为:")
      (princ apple_jsjg)
      (cond ((null apple_oldjd) (setq apple_oldjd 2)))
      (initget 4)
      (setq apple_newjd (getint(strcat "\n输入计算精度<" (rtos apple_oldjd) ">")))
      (if (not apple_newjd)
                (setq apple_newjd apple_oldjd) (setq apple_oldjd apple_newjd)
      )
      (vl-cmdf "text" (getpoint "\n计算结果插入点:")(getdist "\n输入字高:") 0 (rtos apple_jsjg 2 apple_newjd))
      (princ)
)

lxdz443 发表于 2015-12-28 05:31:52

多谢lxw320,我习惯性的在写完一个单词或者字符后敲一下空格,然后就悲剧了,这个代码我都检查好几遍了,还是有些没检查出来。
页: [1]
查看完整版本: 请教这个代码为什么无法选中数字?