DCL忽略空值多行文字
我试图编写一个例程,允许用户在对话框中输入项目和权重,并输出格式化的多行文字(以及其他内容)。我允许用户输入最多10个项目,但我只希望多行文字使用填充的值。我的对话框如下所示:
下面是我的输出结果:
以下是我的多行文字代码:
(setq val (strcat "\\pxtr18,c20,r30;\t" eq1 "\t=\t" wt1 " LB
\\P\t" eq2 "\t=\t" wt2 " LB
\\P\t" eq3 "\t=\t" wt3 " LB
\\P\t" eq4 "\t=\t" wt4 " LB
\\P\t" eq5 "\t=\t" wt5 " LB
\\P\t" eq6 "\t=\t" wt6 " LB
\\P\t" eq7 "\t=\t" wt7 " LB
\\P\t" eq8 "\t=\t" wt8 " LB
\\P\t" eq9 "\t=\t" wt9 " LB
\\P\t" eq10 "\t=\t" wt10 " LB"
))
(entmake
(list
(cons 0 "MTEXT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbMText")
(cons 10 pt1)
(cons 1 val)
(cons 8 "NOTES")
(cons 40 0.09375)
(cons 7 "ROMANS")
(cons 41 4)))
有什么建议可以让它忽略“0”值吗?
提前感谢! 在字符串串联中,您只需要取值。(在“eq”上)使用条件句,以便只包括实际有条目的行。 谢谢neophoible,以下是我如何解决它的。
(if (/= eq1 "0") (setq a (strcat "\\P\t" eq1 "\t=\t" wt1 " LB")) (setq a ""))
(if (/= eq2 "0") (setq b (strcat "\\P\t" eq2 "\t=\t" wt2 " LB")) (setq b ""))
(if (/= eq3 "0") (setq c (strcat "\\P\t" eq3 "\t=\t" wt3 " LB")) (setq c ""))
(if (/= eq4 "0") (setq d (strcat "\\P\t" eq4 "\t=\t" wt4 " LB")) (setq d ""))
(if (/= eq5 "0") (setq e (strcat "\\P\t" eq5 "\t=\t" wt5 " LB")) (setq e ""))
(if (/= eq6 "0") (setq f (strcat "\\P\t" eq6 "\t=\t" wt6 " LB")) (setq f ""))
(if (/= eq7 "0") (setq g (strcat "\\P\t" eq7 "\t=\t" wt7 " LB")) (setq g ""))
(if (/= eq8 "0") (setq h (strcat "\\P\t" eq8 "\t=\t" wt8 " LB")) (setq h ""))
(if (/= eq9 "0") (setq i (strcat "\\P\t" eq9 "\t=\t" wt9 " LB")) (setq i ""))
(if (/= eq10 "0") (setq j (strcat "\\P\t" eq10 "\t=\t" wt10 " LB")) (setq j ""))
(setq val (strcat "\\pxtr18,c20,r30;\t" a b c d e f g h i j)) 不客气。非常好,非常直接,完成了工作。
我应该问你是否真的运行了它以确保它工作。我提到它的原因是,在你的初始“if”之后,你可能有很多表达式需要计算。如果我是对的,那么解决这个问题的一个简单方法就是在它们之前添加一个“progn”,即将它们分组。
我想我只是被压痕弄糊涂了。我习惯于与同级的其他人保持一致。
页:
[1]