小师傅 发表于 2014-9-27 20:26:24

求助:字符串分割

请问大侠:“ED4-01#100+100 TB 325”怎样以“#”为界分解成“ED4-01”和“100+100 TB 325”两行文字呢

Andyhon 发表于 2014-9-27 20:41:48

(setq str "ED4-01#100+100 TB 325")
(parse str "#")

Parse 自定义函数 明经旧帖中有

小师傅 发表于 2014-9-27 21:26:28

Andyhon 发表于 2014-9-27 20:41 static/image/common/back.gif
(setq str "ED4-01#100+100 TB 325")
(parse str "#")



可是我不会把分解成的两行文字插入到原来文字的地方,老大教下我呀

wmz 发表于 2014-9-27 22:22:47

一个最笨的办法:
(defun c:test()
(vl-load-com)
(setq zf "ED4-01#100+100 TB 325")
(setq zf (vl-string-translate "#" " " zf))
(setq zf (vl-string-translate "+" " " zf))
(setq zf (read(strcat "(" zf ")")))
(setq zff1 (car zf))
(setq zf2 (cadr zf))
(setq zf3 (caddr zf))
(setq zf4 (cadddr zf))
(setq zf4 (vl-string-translate "" "" zf4))
(setq zf5 (last zf))
(setq zff2 (strcat (rtos zf2 2 0) "+" (rtos zf3 2 0) " " zf4 " " (rtos zf5 2 0)))
(print "zff1=")(princ zff1)(princ)
(print "zff2=")(princ zff2)(princ)
)

zhongys 发表于 2014-9-28 00:42:09

(setq str "ED4-01#100+100 TB 325")
(setq a# (vl-string-search "#" str))
(setq a1 (substr str 1 a#))
(setq a2 (substr str (+ a# 2)))

wmz 发表于 2014-9-28 07:29:33

(defun c:test()
(vl-load-com)
(setq zf "ED4-01#100+100 TB 325")
(setqm (vl-string-position (ascii "#") zf))
(setq zf1 (substr zf 1 m) zf2 (substr zf (+ m 2)))
(print "zf1=")(princ zf1)(princ)
(print "zf2=")(princ zf2)(princ)
)

小师傅 发表于 2014-9-28 11:08:58

谢谢各位的热心回复,我先在用parse 可以把支付串分解成两个了,但是我不会再原文字位置上写出这两个新文字

自贡黄明儒 发表于 2014-9-28 11:12:39

小师傅 发表于 2014-9-27 21:26 static/image/common/back.gif
可是我不会把分解成的两行文字插入到原来文字的地方,老大教下我呀

简单的可以这样
1 先用textbox计算出第一部分"ED4-01"的长度。
2 拷贝原文字,后移一个距离,将内容改为后面的"100+100 TB 325""

小师傅 发表于 2014-9-28 11:15:20

自贡黄明儒 发表于 2014-9-28 11:12 static/image/common/back.gif
简单的可以这样
1 先用textbox计算出第一部分"ED4-01"的长度。
2 拷贝原文字,后移一个距离,将内容改为 ...

谢谢黄大师,我马上试试

ll_j 发表于 2014-9-28 12:34:51

小师傅 发表于 2014-9-28 11:15 http://bbs.mjtd.com/static/image/common/back.gif
谢谢黄大师,我马上试试

看看是不是这个意思:
(defun c:ttrim (/ ss i l0 en ne eg ng e0 e1 j sr)
(command ".color" (getvar "cecolor"))
(if (not acet-tjust)
    (load "acetutil3")
)
(setq sr (getstring "\n输入分隔字符: "))
(if (member sr '("*" "#" "@" "." "?" "~"))
    (setq sr1 (strcat "`" sr))
    (setq sr1 sr)
)
(princ "\n选择需要去分隔符的文本: ")
(setq ss (ssget (list '(0 . "TEXT") (cons 1 (strcat "*" sr1 "*")))))
(if ss
    (progn
      (setq l0 (sslength ss)
            i-1
      )
      (acet-tjust ss "R")
    )
)
(repeat l0
    (setq i(1+ i)
          en (ssname ss i)
          eg (entget en)
          e1 (cdr (assoc 1 eg))
    )
    (if (wcmatch e1 (strcat sr1 "*"))
      (progn
      (setq e1 (vl-string-left-trim sr e1)
            eg (subst (cons 1 e1) (assoc 1 eg) eg)
      )
      (entmod eg)
      )
    )
    (if (wcmatch e1 (strcat "*" sr1))
      (progn
      (acet-tjust (ssadd en) "S")
      (setq eg (entget en)
            e1 (cdr (assoc 1 eg))
            e1 (vl-string-right-trim sr e1)
            eg (subst (cons 1 e1) (assoc 1 eg) eg)
      )
      (entmod eg)
      )
      (acet-tjust (ssadd en) "S")
    )
    (while (wcmatch e1 (strcat "*" sr1 "*"))
      (setq eg (entget en)
            ng (entmake eg)
            ne (entlast)
            ng (entget ne)
            e0 (cdr (assoc 1 ng))
            e0 (substr e0 1 (setq j (vl-string-search sr e0)))
            ng (subst (cons 1 e0) (assoc 1 ng) ng)
      )
      (entmod ng)
      (acet-tjust (ssadd en) "R")
      (setq eg (entget en)
            e1 (cdr (assoc 1 eg))
            e1 (vl-string-left-trim sr (substr e1 (+ j 1)))
            eg (subst (cons 1 e1) (assoc 1 eg) eg)
      )
      (entmod eg)
      (setq eg (entget en)
            e1 (cdr (assoc 1 eg))
      )
      (acet-tjust (ssadd en) "S")
    )
)
(princ)
)

这是以前一个小程序改的,需要ET支持。
原帖:http://bbs.mjtd.com/thread-99236-1-1.html
页: [1] 2
查看完整版本: 求助:字符串分割