只需一步,快速开始
如有列表
(“000-PL01.DWG”“000-PL02.DWG” “000-PL03.DWG” )
如何让他实现
(“000-PL01.DWG,000-PL02.DWG,000-PL03.DWG”)
用APPLY 'STRCAT的话
只能(“000-PL01.DWG000-PL02.DWG000-PL03.DWG”)
也就是说如何添加","分割开
使用道具 举报
我的函数库中的
;;用分隔符解释字符串成表(defun Fsxm-Split (string strkey / po strlst xlen) (setq xlen (1+ (strlen strkey))) (while (setq po (vl-string-search strkey string)) (setq strlst (cons (substr string 1 po) strlst)) (setq string (substr string (+ po xlen))) ) (reverse (cons string strlst)));;连结表中字符串(defun Fsxm-join (lst str) (substr (apply 'strcat (mapcar '(lambda (a) (strcat str a)) lst)) (1+ (strlen str)) ))
楼上的程序很好,最精简,不过还有一点小问题:末尾多了一个“,”,其执行结果为:"000-PL01.DWG,000-PL02.DWG,000-PL03.DWG,"
我完善了一下:
(defun tt (lst str / tmp) (if lst (setq tmp (car lst) lst (cdr lst) lst (apply 'strcat (mapcar '(lambda (a) (strcat str a)) lst)) tmp (strcat tmp lst) ) nil ;lst为空,则返回nil。当然也可根据需要返回其它值。 ))
(tt '("000-PL01.DWG" "000-PL02.DWG" "000-PL03.DWG") ",")
我的程序都发在前面了,还想来个比我的更精练的哈~?
当然以前我还这样写过:
(strcat (car lst) (apply 'strcat (mapcar '(lambda (a) (strcat str a)) (cdr lst)))
都是很精练的。
小改一下
(defun tt(lst str) (substr (apply 'strcat (mapcar '(lambda (a) (strcat str a)) lst)) 2))
还有更短的么?有
(defun tt (lst str) (setq a (car lst) b (cdr lst))(if b (strcat a "," (tt b str)) a))
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 ) ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途
GMT+8, 2024-5-20 20:06 , Processed in 0.267011 second(s), 26 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.