parkerdepriest 发表于 2022-7-6 06:51:30

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”值吗?
提前感谢!

neophoible 发表于 2022-7-6 07:15:19

在字符串串联中,您只需要取值。(在“eq”上)使用条件句,以便只包括实际有条目的行。

parkerdepriest 发表于 2022-7-6 07:34:19

谢谢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))

neophoible 发表于 2022-7-6 07:55:22

不客气。非常好,非常直接,完成了工作。
 
我应该问你是否真的运行了它以确保它工作。我提到它的原因是,在你的初始“if”之后,你可能有很多表达式需要计算。如果我是对的,那么解决这个问题的一个简单方法就是在它们之前添加一个“progn”,即将它们分组。
 
我想我只是被压痕弄糊涂了。我习惯于与同级的其他人保持一致。
页: [1]
查看完整版本: DCL忽略空值多行文字