自动得到汉字拼音首字母的代码

在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’

这样就可以用药品拼音缩写动态筛选药品了!!! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值