求助 vl-string-search 查汉字
vl-string-search 查带有汉字的字符串时,位置不对,该函数将一个汉字视为两个字符。如何能反回真实位置?
(vl-string-search "人" "中国人民") 返回4,如何能返回2 ? 为什么不除2 陨落 发表于 2013-6-13 16:42 static/image/common/back.gif
为什么不除2
如果前两个不是汉子呢? 用正则表达式吧! cnks 发表于 2013-6-13 17:21 static/image/common/back.gif
如果前两个不是汉子呢?
应该是可以解决的,比如说:用vl-string-search查找到该汉字的位置,然后对该位置之前位置上的字符逐个检查,统计出汉字的个数,然后将原位置的数字减去汉字个数应该就能得到想要的结果了吧 返回值正确的很呀
难道返回2才叫对吗
真返回2的话
你要截取“人”这个字的时候
岂不是要把人之前的所有字符都判断一遍是否大字符? Gu_xl 发表于 2013-6-13 17:46
用正则表达式吧!
赞同G版观点,可能正则表式好搞些 将字符串转换为字符表,然后判断字符在表中的位置 本帖最后由 namezg 于 2013-6-13 22:53 编辑
刚写了一个,试试有没有问题?
;功能:在字符串中搜索指定子串,区分大小写,支持双字节字符(视为一个字符)
;参数:pattern--字符串,包含要搜索的子串。
; string--字符串,在其中搜索 pattern。
; start-pos--整数型,表示搜索的开始位置。缺省值为 0。
;返回值:整数,表示找到指定 pattern 的位置。如果未找到子串,则返回 nil。字符串第一个字符的位置为 0。
;示例:
;(zg-string-search "人" "中国人民Sad人abd" 0)
;(zg-string-search "人" "中国人民Sad人abd" 4)
;(zg-string-search "共" "中国人民Sad人abd" 0)
;(zg-string-search "人" "中国人民Sad人abd" 8)
(defun zg-string-search (pattern str start-pos / i j value tmp_str)
(setq i 0)
(setq j 0)
(while (and (< i (strlen str)) (not value))
(setq tmp_str (substr str (setq i (1+ i)) 1))
(if (> (ascii tmp_str) 128);用于判断是不是遇到了双字节字符
(progn
(setq tmp_str (substr str i 2))
(setq i (+ i 1))
)
)
(if (and (= tmp_str pattern) (>= j start-pos))
(setq value j)
)
(setq j (1+ j))
)
value
) 谢谢各位! namezg
查找汉字法比较简单,正则还不会。
Opendcl 控件 textbox 的 setsel 定位是按字符定位的,不分汉字和字母,所以会出现这个问题。
页:
[1]