全自动查询汉字区位码

 

  每学年的高考、会考和中考前夕,在填写报名信息卡时,所涂写姓名的信息代码就是姓名汉字对应的区位码,同一个汉字有ASCⅡ码、区位码等与之对应。ASCⅡ码中对应于码值161到254 的字符用于表示汉字,每个汉字用两个ASCⅡ码值对应的字符表示。
  区位码是与汉字一一对应的编码,用四位数字表示, 前两位从01 到94称区码,后两位从01到94称位码。 一个汉字的前一半是 ASCⅡ码为“160+区码”的字符,后一半是ASCⅡ码为“160+ 位码”的字符。
  例如:“刘”的区位码是 3385,其意为区码33位码85,它是由ASCⅡ码为160+33=193和160+85=245的两个字符组成。
  用Foxbase中的函数SUBSTR()和ASC() 截取并求得组成汉字两字符的ASCⅡ码,再分别减去160组合成此汉字的四位区位码, 这就是本程序的设计思想。程序清单如下:
set talk off
accept"请输入要操作的数据库名:" to r
if .not. file('&r..dbf') && 检查当前目录下是否有此文件
wait '无此库文件!按任一键退出.'
return
endif
set cons off
use &r
copy to s stru exte && 自动添加"区位码"字段
use s
appe blank
repl field_name with " 区位码 ", field_type with "c",
field_len with 16
crea s1 from s
erase s.dbf
appe from &r
use
erase &r..dbf
rena s1.dbf to &r..dbf
erase s1.dbf
use &r
dime c(6),q(6),w(6)
store ' ' to w
store 0 to c,q
do while .not. eof()
i=1
store '' to qw
do while i<=8
c(i)=asc(substr(姓名,i,1))
q(i)=c(i)-160 && 计算汉字的区位码
if q(i)<0 then
x=' '
w(i)=x
else
if q(i)<10 then
x='0'
w(i)=x+str(q(i),1)
else
w(i)=str(q(i),2)
endif
endif
if i/2=int(i/2) then
qw=qw+w(i)+' '
else
qw=qw+w(i)
endif
i=i+1
enddo
repl 区位码 with qw
skip
enddo
set cons on
set talk on
return
  说明:1、要操作的数据库中必须有“姓名”字段,结果可用LIST显示在屏幕上或用LIST TO PRINT打印在纸上供抄录。
  2、本程序在DOS6.20、UCDOS3.1、FOXBASE 2.1 下调试通过。
(江苏如东县马塘中学 顾拥军 226401)