自己用的内部函数。因为自定义了一些字符,所以复杂了点。你看需要调整吧

- (defun cy_txt_sea_t(str str1 / IN K STRL STRL1 TXT)
- ;;;从头开搜str1字符的位置,返回位置数,无返回nil
- (if (wcmatch str (strcat "*" str1 "*"))(progn
- (setq strl(strlen str)strl1(strlen str1)in 0 k t)
- (while (and k (setq txt(substr str (setq in(1+ in)) strl1)))
- (if (= txt str1)(setq k nil))
- ))
- (setq in nil)
- )in
- )
- (defun cy_str2strb(str / IN IN1 LS ST1 STRB) ;;;按shx文字的规律将字串分解为字串表
- (setq in 1 strb'()
- ls (strlen str))
- (while (<= in ls)
- (setq st1 (substr str in 1))
- (cond
- ((= "%" st1)
- (if (= "%%" (setq st1 (substr str in 2)))
- (cond
- ((wcmatch (setq st1 (substr str in)) "%%[d p c % D P C]*")
- (setq strb(append strb (list (substr str in 3)))in(+ 3 in)))
- ((member (setq st1 (substr str in 3)) '("%%o" "%%u""%%O" "%%U"))
- (setq in(+ 3 in)))
- ((wcmatch (setq st1 (substr str in)) "%%141*%%142*");;;上标上
- (setq in1(cy_txt_sea_t st1 "%%142")
- strb(append strb (list (substr str in (+ in1 4))))
- in(+ in1 4 in))
- )
- ((wcmatch (setq st1 (substr str in)) "%%143*%%144*")
- (setq in1(cy_txt_sea_t st1 "%%144")
- strb(append strb (list (substr str in (+ in1 4))))
- in(+ in1 4 in))
- )
- ((wcmatch (setq st1 (substr str in)) "%%147*%%148*")
- (setq in1(cy_txt_sea_t st1 "%%148")
- strb(append strb (list (substr str in (+ in1 4))))
- in(+ in1 4 in))
- )
- ((wcmatch (setq st1 (substr str in)) "%%149*%%150*")
- (setq in1(cy_txt_sea_t st1 "%%150")
- strb(append strb (list (substr str in (+ in1 4))))
- in(+ in1 4 in))
- )
- ((wcmatch (setq st1 (substr str in)) "%%145*%%146*%%144*")
- (setq in1(cy_txt_sea_t st1 "%%144")
- strb(append strb (list (substr str in (+ in1 4))))
- in(+ in1 4 in))
- )
- (t (setq strb(append strb (list(substr str in 5)))in(+ 5 in)))
- )
- )
- )
- ((> (ascii (setq st1 (substr str in 1))) 128)
- (setq strb(append strb (list (substr str in 2)))in(+ 2 in))
- )
- (t (setq strb(append strb (list(substr str in 1)))in(+ 1 in)))
- )
- )strb
- )
|