在vfp中新建一个带参数的程序ChrTOpy.prg加入代码如下:
PARAMETER cHZCHR
LOCAL cPYCHR,i,j,C,HZ
cPYCHR=""
SET COLLATE TO "PINYIN" &&设置当前排序方式为拼音方式
PYCode="八嚓咑妸发旮铪讥讥咔垃呣拿讴趴七呥仨他哇哇哇夕丫匝咗" &&从b开始每个拼音码的首字符
FOR i=1 TO LEN(cHZCHR)
IF ASC(SUBSTR(cHZCHR,i,1))>160 &&判断是否为汉字
HZ=SUBSTR(cHZCHR,i,2)
C=""
FOR j=1 TO 26
IF SUBSTRC(HZ,1,1)<SUBSTRC(PYCode,j,1) &&进行汉字比较
C=CHR(96+j) &&得到首位拼音码
EXIT
ENDIF
ENDFOR
cPYCHR=cPYCHR+UPPER(C)
i=i+1
ELSE
cPYCHR=cPYCHR+UPPER(SUBSTR(cHZCHR,i,1))
ENDIF
ENDFOR
RETURN cPYCHR
使用方法:
如果执行ChrTOpy("计算机"),可以得到JSJ.
对于一些程序中需要快速筛选时非常方便,可以在表中增加一个名为'py'的字段,
比如表tblyaopin.dbf
药品名称 批发价 生产厂家 py
感抗 10 xxxx
青霉素 20 xxxx
阿司匹林 9 xxxx
执行以下代码后
use tblyaopin.dbf
update tblyaopin set py=ChrToPy(药品名称)
得到如下结果:
药品名称 批发价 生产厂家 py
感抗 10 xxxx GK
青霉素 20 xxxx PMS
阿司匹林 9 xxxx ASPL
实例应用:
对于一些程序中动态筛选,比如有一个查询药品的表单,添加text1,grid1,
在text1 的interactivechange中添加如下代码
IF NOT EMPTY(ALLTRIM(This.Value))
PUBLIC cFilter
cFilter=UPPER(ALLTRIM(This.Value))
SELECT 药品目录
SET FILTER TO OCCURS(cFilter,药品目录.Py)>0 &&筛选包含当前输入拼音的记录
ELSE
SET FILTER TO &&当前输入为空时清除筛选条件
ENDIF
Thisform.grid1.Refresh
设置grid1的数据源为‘药品目录.dbf’
这样就可以用药品拼音缩写动态筛选药品了!!!