ILoveMadoka 发表于 2022-7-5 20:03:39

组合多个TBL搜索lin

有没有可能使它更紧凑?
 
(DEFUN C:TEST ()

(if (/= (tblsearch "STYLE" "ROMANS"))
(COMMAND "-STYLE" "ROMANS" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE0"))
(COMMAND "-STYLE" "SLDTEXTSTYLE0" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE1"))
(COMMAND "-STYLE" "SLDTEXTSTYLE1" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE2"))
(COMMAND "-STYLE" "SLDTEXTSTYLE2" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE3"))
(COMMAND "-STYLE" "SLDTEXTSTYLE3" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE4"))
(COMMAND "-STYLE" "SLDTEXTSTYLE4" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE5"))
(COMMAND "-STYLE" "SLDTEXTSTYLE5" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE6"))
(COMMAND "-STYLE" "SLDTEXTSTYLE6" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE7"))
(COMMAND "-STYLE" "SLDTEXTSTYLE7" "ROMANS" "" "" "" "N" "N" "N")

(if (= (tblsearch "STYLE" "SLDTEXTSTYLE8"))
(COMMAND "-STYLE" "SLDTEXTSTYLE8" "ROMANS" "" "" "" "N" "N" "N")

(PRINC))

 
 
请提供指导?

hanhphuc 发表于 2022-7-5 20:11:49

 
mapcar方法


(defun c:test nil
(mapcar ''((x) (if (not (tblsearch "STYLE" x))
(COMMAND "-STYLE" x "ROMANS" "" "" "" "N" "N" "N")))
((lambda (i / l)
(vl-list* "ROMANS" (repeat 9 (setq l (cons (strcat "SLDTEXTSTYLE"(itoa(setq i (1- i)))) l)))))
9))
(princ))

jdiala 发表于 2022-7-5 20:18:04

韩抢在我前面,可怜的打字员。。。
 
(defun c:test ()
(mapcar
(function
(lambda (x)
    (if
      (not (tblsearch "style" x))
       (COMMAND "-STYLE" x "ROMANS" "" "" "" "N" "N" "N")
      )
    )
)
'("ROMANS" "SLDTEXTSTYLE0" "SLDTEXTSTYLE1" "SLDTEXTSTYLE2" "SLDTEXTSTYLE2")
)
(princ)
)

hanhphuc 发表于 2022-7-5 20:18:45

 
好久不见jdiala了!
没有什么能打败你,我也从你那里学到了
 
另一个
cond方法
编辑:此方法仅在当前样式匹配时应用更改

(defun c:test2 nil
;switch current *style to ROMANS ,which styles are limited by user
(eval
   (cons 'cond
    (mapcar ''((x)
             (list
                (equal (cdr(assoc 2 (tblsearch "STYLE" (getvar 'textstyle)))) x)
                (cons 'command (list "-STYLE" x "ROMANS" "" "" "" "N" "N" "N")))
             ) ;_ end of lambda
                             ((lambda (i / l)
             (vl-list* "ROMANS"
                       (repeat 9 (setq l (cons (strcat "STY" (itoa (setq i (1- i)))) l)))
                       ) ;_ end of vl-list*
             ) ;_ end of lambda
              9
              )
          ) ;_ end of mapcar
    ) ;_ end of cons
   ) ;_ end of eval
(princ)
)

 
这解释了在评估之前上述测试2的相似性

;where T= (tblsearch "STYLE" (getvar 'textstyle))
;assume "STY4" is current style, ie: only "STY4" is effected

(COND (nil (COMMAND "-STYLE" "ROMANS" "ROMANS" "" "" "" "N" "N" "N"))
   (nil (COMMAND "-STYLE" "STY0" "ROMANS" "" "" "" "N" "N" "N"))
   (nil (COMMAND "-STYLE" "STY1" "ROMANS" "" "" "" "N" "N" "N"))
   (nil (COMMAND "-STYLE" "STY2" "ROMANS" "" "" "" "N" "N" "N"))
   (nil (COMMAND "-STYLE" "STY3" "ROMANS" "" "" "" "N" "N" "N"))
   (T   (COMMAND "-STYLE" "STY4" "ROMANS" "" "" "" "N" "N" "N")); <-- example curent style= T
   (nil (COMMAND "-STYLE" "STY5" "ROMANS" "" "" "" "N" "N" "N"))
   (nil (COMMAND "-STYLE" "STY6" "ROMANS" "" "" "" "N" "N" "N"))
   (nil (COMMAND "-STYLE" "STY7" "ROMANS" "" "" "" "N" "N" "N"))
   (nil (COMMAND "-STYLE" "STY8" "ROMANS" "" "" "" "N" "N" "N"))
   ) ;_ end of COND

cond方法第三行

(defun c:test3 nil
(COMMAND "-STYLE" (getvar 'textstyle) "ROMANS" "" "" "" "N" "N" "N")
)


 
的确,我打字打得不好
jdiala打败了我

ILoveMadoka 发表于 2022-7-5 20:25:33

我想我会倾向于;
 

''((x) (if (not (tblsearch "STYLE" x))

 
 
-大卫

ILoveMadoka 发表于 2022-7-5 20:30:46

 
这部分是循环usung repeat,你的例子是0~8

(eval (cons 'not (list '(tblsearch "STYLE" x) 'x)))

 
编辑:
谢谢David
ILoveMadoka,请注意David先生也使用了重复循环

hanhphuc 发表于 2022-7-5 20:36:24

 
你在帮我。无需道歉!
 
非常感谢!
 
 
大卫,
 
我也会看看你的。
 
谢谢你,先生!

David Bethel 发表于 2022-7-5 20:41:02

在第4篇文章中更新。
*仅供参考
 
 
也许是我的困惑:
 
如果你不想像帖子#2中那样创建不需要的*样式0~8,
这意味着你指的是已经存在的样式?
更新此

(defun c:rstyle (/ i s)

(if (not (tblsearch "STYLE" "ROMANS"))
   (progn
    (command "_.STYLE" "ROMANS" "ROMANS")
    (while (> (getvar "CMDACTIVE") 0)
         (command ""))))

(setq i 0)
(repeat 9
(setq s (strcat "SLDTEXTSTYLE" (itoa i)))
(if (tblsearch "STYLE" s)
      (progn
      (command "_.STYLE" s "ROMANS")
      (while (> (getvar "CMDACTIVE") 0)
               (command ""))))
(setq i (1+ i)))

(prin1))

hanhphuc 发表于 2022-7-5 20:47:05

大卫,
 
这非常有效!非常感谢。
 
 
 

ILoveMadoka 发表于 2022-7-5 20:51:50

不客气。您可以添加一些错误捕捉,以确保可以制作罗马字母,但大多数系统在搜索路径中都有罗马字母
页: [1] 2
查看完整版本: 组合多个TBL搜索lin