按字符串长度分割字符串
(splen str len mark)len 表示需要分割的长度
mark 是需要分割的长度大于1,刚好碰到双字节汉字时,加1位或者减1位
比如说 str= "hi,你好"
如果直接用strlen长度取4的时候, 会取到 "hi, ? 乱码了
碰到这种情况的时候 ,
如果mark = nil ,则会多取一位取到 hi,你
(splen str 4 nil) 的执行结果是 ("hi,你" "好")
如果mark = t, 则会少取一位取到 hi,
(splen str 4 nil) 的执行结果是 ("hi," "你好")
(splen str 2 nil)
返回("hi" ",你" "好")
(splen str 2 t)
返回("hi" "," "你" "好")
(defun splen (str len mark / ad l1 s1 sp g1)(if (not (> len 1))
(setq ad 1 len 1)
(if mark
(setq ad -1)
(setq ad 1)
)
)
(setq l1 (strlen str))
(while (> l1 len)
(setq s1 len)
(setq g1 (substr str 1 s1))
(setq ns (strcat g1 "*"))
(if (and
(wcmatch ns "*`*");;;;如果取到的字符是汉字的半个字符,跟*合并之后*号会被吸收掉,检测一下是否被吸收
(wcmatch str ns))
(setq sp (cons g1 sp))
(progn
(setq s1 (+ len ad))
(setq g1 (substr str 1 s1))
(setq sp (cons g1 sp))
)
)
(setq str (vl-string-subst "" g1 str))
(setq l1 (strlen str))
)
(if (/= str "")
(setq sp (Cons str sp))
)
(reverse sp)
)
6666666666666
页:
[1]