在一文本框中用汉字或拼音字头对汉字字段筛选,不知对否?
在一个文本框中输入筛选条件,逐字(每输入一个汉字或字母,就筛选一次)对一个汉字字段筛选,输入汉字可较精确的筛选,输入拼音字头可模糊筛选,因为输入条件是混合的,为了程序的严密性,这就需要判断,根据网上高手提供的方法,实现了目的,但有时效果不太理想(慢),贴出请高手指点:
对输入的字符串条件,先判断
1.取26字母
** 如字符串不含双字节字符提取26个英文字母
PARAMETERS cString
LOCAL cStr
cStr=""
IF LEN(cString)=LENC(cString) && 如不含双字节字符
nStrLen=LEN(cString)
FOR nPos=1 TO nStrLen
cTmpStr=SUBSTR(cString,nPos,1)
nHex=ASC(cTmpStr)
IF BETWEEN(nHex,65,90) OR BETWEEN(nHex,97,122) && 取英文26个大小写字母
cStr=cStr+cTmpStr
ENDIF
ENDFOR
ENDIF
RETURN cStr
2.如为空,含双字节字符,按汉字筛选,挑出汉字,排除一切其它双字节字符
** 取字符串中汉字
** 借助Unicode编码实现从一字符串里面挑出汉字(无论简繁)
** 先对字符串作编码转化,改为Unicode编码(为避免单字节字符影响,先双字节化)
** 然后根据编码规则实现
PARAMETERS cString
LOCAL cStr
cStr=""
cString=STRCONV(STRCONV(cString,1),5) && 1-将单字节字符转换为双字节字符;5-将双字节字符转换为 UNICODE (宽字符)。
nStrLen=LEN(cString)-1
FOR nPos=1 TO nStrLen STEP 2
cTmpStr=SUBSTR(cString,nPos,2)
nLowHex=ASC(LEFT(cTmpStr,1))
nHighHex=ASC(RIGHT(cTmpStr,1))
nHex=BITLSHIFT(nHighHex,8)+nLowHex
IF nHex>=13383 AND nHex<=64041
cStr=cStr+cTmpStr
ENDIF
ENDFOR
cStr=STRCONV(cStr,6) && 6-将 UNICODE (宽字符)转换为双字节字符。
RETURN cStr
3.如不为空,,取出的是26字母中的字符,按拼音字头筛选,方法很多,见
‘汉字转化拼音及APP文件的问题’
http://topic.csdn.net/u/20070924/00/bdd38549-3486-4f2b-bcdc-c9febd754b00.html
我已在此帖跟帖提出问题,内容如下:
“1楼的方法1好像有问题,虽然此程序是专家张洪举所编,但大家试一试用程序本身的汉字串,就不能正常显示拼音字头:
?Getpy('八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗')
显示:
BC匞奆GHJJKL匶MAKBXMBBQAJXA
如用Pinyin.dll方法
?Getpyl('八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗')
显示小写,正常:
bcdefghjjklmnopqrstwwwxyzz
不知问题出在哪?”
好像用Pinyin.dll方法较好
实现的步骤方法:在表单新建以上3个方面的事件;在文本框的InteractiveChange事件进行筛选,用SET FILTER 命令对表格的数据过滤。
[解决办法]
1、张老师的取简拼方法我用,正常呀。
2、要打出慢在哪里,然后再优化。一步一步找原因,看看慢在哪里。