wgij007 发表于 2023-11-15 21:49:50

请问如何拆开字符串

本帖最后由 wgij007 于 2023-11-16 21:15 编辑





如何提取 114567 到剪切板 ,第4行的格式一样的,只是数字不一样的

zhaoxt 发表于 2023-11-15 21:49:51

一天了还没好吗。上面这个不是不行,是要下他的函数库支持。你样本里的是中方输入法下的分号,其实还要同时考虑下英文的冒号的情况。自己完善下吧
(vl-load-com)
(defun c:tt( / str str-lst)
(setq str (cdr(assoc 1 (entget (car(entsel"请选择....."))))))
(setq str-lst (vl-string->list str))
(setq str-lst (member (ascii ":") str-lst))
   (setq str-lst (vl-remove-if-not '(lambda(x)(or (= x 46) (and (> x 47)(< x 58)))) str-lst))
(setq str (vl-list->string str-lst))

(SET-CLIP-STRING str)
(princ)
)

;;;功能:向系统剪贴板写入文字(这个函数不是我写的,论坛里好多,随便搜了一个)                                  *

(defun SET-CLIP-STRING (STR / HTML RESULT)
(and (= (type STR) 'STR)
       (setq HTML (vlax-create-object "htmlfile"))
       (setq RESULT (vlax-invoke
                      (vlax-get      (vlax-get HTML 'PARENTWINDOW)
                              'CLIPBOARDDATA
                      )
                      'SETDATA
                      "Text"
                      STR
                  )
       )
       (vlax-release-object HTML)
)
(princ)
)

zhaoxt 发表于 2023-11-16 06:43:05

;;如果格式一致就好办,一个vl-remove-if-not函数就搞定.
(vl-load-com)
(defun c:tt( / str str-list)
(setq str (cdr(assoc 1 (entget (car(entsel"请选择....."))))))
(setq str-lst (vl-string->list str))
(setq str-lst (vl-remove-if-not '(lambda(x)(or (= x 46) (and (> x 47)(< x 58)))) str-lst))
(setq str (vl-list->string str-lst))
(SET-CLIP-STRING str)
(princ)
)

;;;功能:向系统剪贴板写入文字(这个函数不是我写的,论坛里好多,随便搜了一个)                                  *

(defun SET-CLIP-STRING (STR / HTML RESULT)
(and (= (type STR) 'STR)
       (setq HTML (vlax-create-object "htmlfile"))
       (setq RESULT (vlax-invoke
                      (vlax-get      (vlax-get HTML 'PARENTWINDOW)
                              'CLIPBOARDDATA
                      )
                      'SETDATA
                      "Text"
                      STR
                  )
       )
       (vlax-release-object HTML)
)
(princ)
)

wgij007 发表于 2023-11-16 08:22:23

zhaoxt 发表于 2023-11-16 06:43
;;如果格式一致就好办,一个vl-remove-if-not函数就搞定.
(vl-load-com)
(defun c:tt( / str str-list)


您好,不行呀,我只要第四行的数字,但这个第一行也提取了

xj6019 发表于 2023-11-16 08:28:14

截个图让别人猜,人才!!!!单行文字?多行文字?块?属性?

vitalgg 发表于 2023-11-16 17:07:12

本帖最后由 vitalgg 于 2023-11-17 00:36 编辑

只提取长度(即后跟单位mm的数字,mm与数字间可以有空格,但不可以有全角空格)

(defun c:tt()
(if (setq en-txt (car(pickset:to-list(ssget ":S" '((0 . "*text"))))))
      (progn
      (setq res(reverse(string:auto-split(text:remove-fmt(text:get-mtext en-txt)))))
      (setq res (vl-remove-if '(lambda(x)(= "" (vl-string-trim " " x))) res))
      (if (string:numberp (setq res (cadr (member "mm" res))))
            (progn
            (@:prompt (strcat "已将" res "复制到剪贴板"))
            (clipboard:setdata res))
            (@:prompt"没有合适的数字")
            ))))

以上代码所有自定义函数均来自@lisp函数库https://gitee.com/atlisp/atlisp-lib


https://atlisp.cn/static/videos/提取毫米数据到剪贴板.mp4

wgij007 发表于 2023-11-16 21:16:41

vitalgg 发表于 2023-11-16 17:07
只提取长度(即后跟单位mm的数字,mm与数字间可以有空格,但不可以有全角空格)




你好,还是不可

wgij007 发表于 2023-11-16 21:17:54

xj6019 发表于 2023-11-16 08:28
截个图让别人猜,人才!!!!单行文字?多行文字?块?属性?

抱歉,没细想,已上传了。

vitalgg 发表于 2023-11-17 02:23:08

wgij007 发表于 2023-11-16 21:16
你好,还是不可

https://atlisp.cn/static/videos/提取有量纲数字.mp4

wgij007 发表于 2023-11-17 08:13:57

vitalgg 发表于 2023-11-17 02:23


不知为什么弹出 Error: undefined function - PICKSET:TO-LIST
页: [1] 2
查看完整版本: 请问如何拆开字符串