可被整除的筛选文本值
请帮我过滤所有可以被5整除的文本。提前感谢:) 请帮我编辑我写的代码
(defun c:div ()
(setq divi (getdist "Enter divisibility:"))
(setq layer (strcat "div_"(rtos divi 2 2)))
(if (setq ss (ssget "_X" '((0 . "TEXT"))))
(repeat (setq i (sslength ss))
(setq num (getreal (assoc 1 (entget (setq e (ssname ss (setq i (1- i))))))))
)
)
(command "-layer" "m" layer "")
(if
(= (rem num divi ) 0)
(command "_.chprop" e "" "_layer" layer "")
)
(princ)
)
你好,rrulep,
getreal通常为用户提示。
但我注意到它在一个重复循环中
我使用2007,以下是我的常规做法:
(setq num(atof(cdr(assoc 1(entget…))))))
我已经换了,但还是没用。
可能有什么错误?
你能试试吗?如果有效,请将其发回。
提前感谢 嗨,我没有更改任何内容,只是移动(命令“layer”…)在重复循环中。
(defun c:div(/ divi layer ss num i e dxf)
(setq divi (getreal "Enter divisibility: ");
layer (strcat "div_" (rtos divi 2 2))
dxf'((_e _i _val / _en)
(setq _en (entget _e))
(if (assoc _i _en)
(entmod (subst (cons _i _val) (assoc _i _en) _en))
(entmod (append _en (list (cons _i _val))))
) ; if
(princ))
)
(if (setq ss (ssget "_X" '((0 . "TEXT"))))
(repeat (setq i (sslength ss))
(setq num (atof (cdr (assoc 1 (entget (setq e (ssname ss (setq i (1- i)))))))))
(command "-layer" "m" layer "")
(if (= (rem num divi) 0)
;;;(command "_.chprop" e "" "_layer" layer "");
(dxf e 8 layer))));*dxf code 8 is for Layer
(princ))
*在代码中使用(命令“-layer”)不是一个好做法,所以我替换entmod可能更快
;这只是您的简单代码,您可以添加错误处理程序、其他ssget过滤器等。。
祝你好运 (defun C:test (/ n i s ss lay )
(if
(setq n (getint "\nEnter divisibility:")
ss (ssget "_X" '((0 . "TEXT")))
lay (itoa n)
)
(progn
(if
(not (tblsearch "layer" (strcat "Div_" lay)))
(entmake
(list
'(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
(cons 70 0)
(cons 2 (strcat "Div_" lay))
)
)
)
(setq lay (strcat "Div_" lay))
(repeat (setq i (sslength ss))
(if
(multipleof (atof (cdr (assoc 1 (entget (setq s (ssname ss (setq i (1- i)))))))) n)
(vla-put-layer (vlax-ename->vla-object s) lay)
)
)
)
)
(princ)
)
(defun multipleof (n x)
(while (> n x) (setq n (- n x)))
(if (= n x) t nil)
) 一个简单的除数检查是余数必须是。0 35/5=5.0 36/5=5.2只需使用修复来检查是否。0 过滤可被5整除的文本:
(ssget '((0 . "TEXT") (1 . "*")))
可以选择“a5”,并且不能被5整除。。。所以你可以添加过滤器,比如图层、样式、高度等等。
此外,如果要选择的数字在特定范围内,例如小于1000,则过滤器可能为:(1。“##、#、#、”) 你好,好主意,斯特凡。我在想(numberp(read str))如果使用(atof str),就可以去掉返回零的字母字符串
我认为零也可以忽略,因为它总是可以整除的? @hanhphuc公司
方括号匹配所包含的任何单个字符。
例如,##表示##0或##5。
换句话说,它意味着“任何正好包含3个字符的字符串,以任意2个数字字符开头,以0或5结尾”
页:
[1]