超难字串处理求助
请问各位大神,如下字串(“平面图/p01 立面图/l01 平面图/p02立面图/l02 节点图/d01“)处理成
(” 平面图/p01/p02 立面图/l01/l02 节点图/d01“ )即保留一个相同的图名,图号合并,不同的仍然
保留。
请出手,谢谢。 谢谢,麻烦可否给代码。 (defun c:fgstr(/ str1 lststr lst1 lst2 str2 str lst3 str)
(setq str1 "平面图/p01 立面图/l01 平面图/p02 立面图/l02 节点图/d01")
(setq lststr(str->lst str1 " "))
(mapcar (function(lambda(x)
(setq lst1 (str->lst x "/")
lststr (cdr lststr)
)
(if (not(assoc (car lst1) lst2))
(setq lst2 (append lst2(list lst1)))
(setq lst2 (subst (append(assoc (car lst1)lst2)(cdr lst1))(assoc (car lst1) lst2)lst2))
)
(setq lst1 nil)
))
lststr
)
(setq str2 "" )
(foreach x lst2
(while x
(setq str2 (strcat str2 (car x)"/")
x (cdr x)
)
)
(setq lst3 (append lst3 (list (vl-string-right-trim "/" str2) " ")))
(setq str2 "")
)
(setq str(vl-string-right-trim " " (apply 'strcat lst3)))
(princ str)
(princ)
)
(defun str->lst(str sign / position lst);;;str:字符串 sign字符串分割标记,例如"1 2 3 4"->("1" "2" "3" "4")
(while (and str(/= str ""))
(if(setq position (vl-string-search sign str))
(progn
(setq lst (append lst (list (substr str 1position))))
(setq str (substr str(+ 2 position)))
)
(progn
(setq lst (append lst (liststr )))
(setq str nil)
)
)
)
lst
) 好人啊,谢谢了. 再次谢谢。
页:
[1]