teknomatika 发表于 2022-7-6 06:28:13

过滤/分离字母/nu

有人知道并能指出一些例程,允许在文本选择中过滤/分离字母/数字吗?

ReMark 发表于 2022-7-6 06:36:15

你到底想做什么?请提供一个例子。

Lee Mac 发表于 2022-7-6 06:42:38

这是我的功能:

;; Split String-Lee Mac
;; Splits a string into a list of text and numbers

(defun LM:splitstring ( str )
   (
       (lambda ( l )
         (read
               (strcat "("
                   (vl-list->string
                     (apply 'append
                           (mapcar
                               (function
                                 (lambda ( a b c )
                                       (cond
                                           (   (= 92 b)
                                             (list 32 34 92 b 34 32)
                                           )
                                           (   (or (< 47 b 58)
                                                   (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                                   (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                             )
                                             (list b)
                                           )
                                           (   (list 32 34 b 34 32))
                                       )
                                 )
                               )
                               (cons nil l) l (append (cdr l) '(( )))
                           )
                     )
                   )
                   ")"
               )
         )
       )
       (vl-string->list str)
   )
)

 
 
 
 
李,
我感谢大家的关注。
我一直在查。根据我的理解和测试,例程可以在不同的步骤中检查和过滤整数和实数。然而,我打算扫描同时隔离所有字母数,反之亦然。
过滤结果在选择中可用以分配特定层也是至关重要的。

teknomatika 发表于 2022-7-6 06:43:28

 
我不明白teknomatika,你的目标是什么?

Lee Mac 发表于 2022-7-6 06:51:53

 
pBe,
这是lee mac引用的代码的一部分。
正如我所解释的,从我可以尝试的情况来看,它可以在不同的步骤、整数和实数进行过滤,但只在提示中显示结果。
我希望过滤同时可用,这是选择的结果,允许操作/编辑,例如指定特定层。
总之,拟议目标是分离/隔离字母/数字(实数或整数)

teknomatika 发表于 2022-7-6 06:55:36

 
我提供的链接不是一个现成的解决方案,您可以复制/粘贴您的任务;我只是给你指出了正确的方向,并提供了一些工具来帮助你编写自己的程序。

pBe 发表于 2022-7-6 07:02:06

 
是的,当然。

teknomatika 发表于 2022-7-6 07:05:19

现在这个解决方案对我有帮助。
这并不完全是您想要的解决方案,因为过滤器必须包括所有实体文本,即使具有不同的属性(样式、图层、颜色、高度等)。
 
 
_$ (LM:splitstring "ab12c-3.1de4.2f56")
("a" "b" 12 "c" -3.1 "d" "e" 4.2 "f" 56)

Lee Mac 发表于 2022-7-6 07:08:13

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun kg:SsgetFilterReal ()
'(
   (1 . "~*[~-.0-9]*") ; only minus signs, decimal points and numbers allowed
   (1 . "*`.*")      ; there must be one decimal point
   (1 . "~*`.*`.*")    ; only one decimal point allowed
   (-4 . "<OR")
   (1 . "~*-*")      ; there is no minus sign
   (-4 . "<AND")
       (1 . "-*")      ; the minus sign must be the first character
       (1 . "~*-*-*"); only one minus sign allowed
   (-4 . "AND>")
   (-4 . "OR>")
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:Comp (/ ent ss i lst)
(if
   (and
   (setq ent (entsel "\nPlease select a text for style, layer and text height filtering: "))
   (setq ent (entget (car ent)))
   (or
       (equal '(0 . "TEXT") (assoc 0 ent))
       (prompt "\nNot a text ")
   )
   (or
       (setq ss
         (ssget
         "_X"
         (vl-list*
             '(0 . "TEXT")
             (assoc 7 ent)      ; style of digit text
             (assoc 8 ent)      ; selected layer name
             (assoc 40 ent)       ; selected text height
             (assoc 410 ent)      ; current tab only
             ;; numerical text filtering:
                  (kg:SsgetFilterReal)
         )
         )
       )
       (prompt "\nNo selection ")
   )
   )
   (mapcar
   '(lambda (a) (cdr (assoc 1 (entget a))))
   (repeat (setq i (sslength ss))
       (setq lst (cons (ssname ss (setq i (1- i))) lst))
   )
   )
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
通过对DXF 1使用更少的滤波器可以轻松实现这一点。但话说回来,我不确定,除非我们看到“其他”条件是什么。
 
我只是说

teknomatika 发表于 2022-7-6 07:13:20

pBe,
谢谢你的关注。
页: [1] 2
查看完整版本: 过滤/分离字母/nu