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