pop159 发表于 2012-4-18 13:53:01

超难字串处理求助


请问各位大神,如下字串(“平面图/p01 立面图/l01 平面图/p02立面图/l02 节点图/d01“)处理成
(” 平面图/p01/p02 立面图/l01/l02 节点图/d01“ )即保留一个相同的图名,图号合并,不同的仍然
保留。
请出手,谢谢。

pop159 发表于 2012-4-18 14:40:48

谢谢,麻烦可否给代码。

yjr111 发表于 2012-4-18 15:27:10

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

pop159 发表于 2012-4-18 15:45:26

好人啊,谢谢了.

pop159 发表于 2012-4-18 15:49:20

再次谢谢。
页: [1]
查看完整版本: 超难字串处理求助