过滤/分离字母/nu
有人知道并能指出一些例程,允许在文本选择中过滤/分离字母/数字吗? 你到底想做什么?请提供一个例子。 这是我的功能:;; 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,你的目标是什么?
pBe,
这是lee mac引用的代码的一部分。
正如我所解释的,从我可以尝试的情况来看,它可以在不同的步骤、整数和实数进行过滤,但只在提示中显示结果。
我希望过滤同时可用,这是选择的结果,允许操作/编辑,例如指定特定层。
总之,拟议目标是分离/隔离字母/数字(实数或整数)
我提供的链接不是一个现成的解决方案,您可以复制/粘贴您的任务;我只是给你指出了正确的方向,并提供了一些工具来帮助你编写自己的程序。
是的,当然。 现在这个解决方案对我有帮助。
这并不完全是您想要的解决方案,因为过滤器必须包括所有实体文本,即使具有不同的属性(样式、图层、颜色、高度等)。
_$ (LM:splitstring "ab12c-3.1de4.2f56")
("a" "b" 12 "c" -3.1 "d" "e" 4.2 "f" 56) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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使用更少的滤波器可以轻松实现这一点。但话说回来,我不确定,除非我们看到“其他”条件是什么。
我只是说 pBe,
谢谢你的关注。
页:
[1]
2