china.com
主页
新闻
体育
游戏
文化
教育
健康
财经
科技
旅游
军事
娱乐
商贸
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  


编程实现按笔划排序的方法

2000-08-14 16:46:51

  在使用VFP编写应用程序过程中笔者遇到这样一个问题,用户要求对系统中的某一人员库中姓名字段内容按照姓氏笔划由少到多进行排序。使用VFP系统编程的人都知道,VFP系统中没有提供相应的命令和函数实现汉字按笔划排序的功能,而在Word字处理系统中提供了对汉字按笔划的多少进行排序的功能。为了解决应用程序中用户提出的这个要求,笔者利用Windows系统提供的输入法生成器逆转换功能和Word字处理系统的汉字排序功能相结合,使用VFP提供的相应命令和函数,巧妙地实现了数据库中人员姓名字段按笔划排序的要求。

  一、生成一个按笔划排序的字典库

  利用Windows系统中输入法生成器提供的功能来生成一个包括全部汉字的文本文件。点击Windows开始选单选择程序→附件→输入法生成器,进入输入法生成器窗口,点击逆转换页框,点击打开文件,选择Windows\System文件夹下的拼音输入法字典库WINPY.MB,在码表原文件框中输入为C:\WINPY.TXT,点击逆转换命令按钮,系统对字典库进行转换,最后将在C盘根目录下生成一个名为WINPY.TXT的文本文件,文本文件生成完毕后退出输入法生成器系统。

  二、编写程序MAIN.PRG

  程序内容如下:

   SET SAFETY OFF

   set talk off

   crea tabl b1 (nr1 c(4))

   &&新建一个数据表文件

   appe from c:\winPY.txt sdf

   &&追加拼音字典文本到数据表中

   dele for asc(subs(nr1,3,1))>=128 or recn()<13

   pack

   REPL NR1 WITH SUBS(NR1,1,2) ALL

   inde on nr1 to ls

   copy to ls

   zap

   USE B1

   appe from ls

   &&对数据表内容进行排序

   GO TOP

   ABC=′DD′

   DO WHIL NOT EOF()

   IF NR1=ABC

      DELE

   ELSE

      ABC=NR1

   ENDIF

   SKIP

   ENDDO

   PACK

   COPY TO C:\BM1 SDF FOR RECN()<=10451

   COPY TO C:\BM2 SDF FOR RECN()>10451

  =MESSAGEBOX(″请进入Word分别对BM1和BM2文本文件进行排序,排序完毕后保存文件并退出Word″,48,′操作提示′)

  &&由于Word系统对文本文件排序的长度受限制,所以生成两个文本文件进行排序。

   COPY TO B2 FOR RECN()<1

   COPY TO B3 FOR RECN()<1

   SELE 0

   USE B2

   APPE FROM C:\BM1 SDF

   USE

   SELE 0

   USE B3

   APPE FROM C:\BM2 SDF

   USE

   SELE B1

   ZAP

   APPE FROM B2 FOR RECN()<=5000

   APPE FROM B3

   APPE FROM B2 FOR RECN()>5000

   BROW

   COPY TO C:\BM1 SDF FOR RECN()<=10000

   COPY TO C:\BM2 SDF FOR RECN()>10000

   =MESSAGEBOX(″请再次进入Word分别对BM1和BM2文本文件进行排序,排序完毕后保存文件并退出Word″,48,′操作提示′)

   SELE B1

   ZAP

   APPE FROM C:\BM1 SDF

   APPE FROM C:\BM2 SDF

   &&删除相同的汉字,保证任意一个汉字在数据表中是惟一的。

  程序输入完毕后,运行这个程序,系统将自动建立一个数据表文件,这个数据表文件中保存着全部汉字包括扩展字库及全部繁体汉字共计20902个汉字。

  三、在Word中对程序生成的文本文件进行排序

  当程序提示进入Word分别对文本文件BM1和BM2进行排序时,首先进入Word编辑系统,打开纯文本文件BM1.TXT,这时Word窗口中显示每行一个汉字共一万余行的文本文件的内容。接着点击Word选单中的表格选单项,选择排序项,进入排序文字窗口,选择排序依据为段落数,类型为笔划,选择递增,当前数据清单为无标题行,设置完毕后点击确定按钮,Word将对BM1.TXT按笔划由少至多进行排序,排序结束后,保存排序后的文件内容后退出。按照同样方法,对BM2.TXT进行排序。

  四、利用生成的库文件对要求按笔划进行排序的数据表中内容进行排序

  在这里我们以对一个数据表XMK.DBF中人员姓名NAME字段内容按笔划进行排序,这个数据表中要包括一个字段ZZMM,这个字段为字符型,是索引时使用的,这个字段的宽度根据要排序字段的宽度乘以3得来的,这是一个临时使用的字段,数据排序完毕后,可以将这个字段删除。将下列代码写入一个程序或加入表单中某一按钮的Click事件中,即可实现按笔划排序的要求。

   USE B1

   SELE 0

   USE XMK

   DO WHIL NOT EOF()

   PXZ=′′

   FOR I=1 TO LEN(ALLT(NAME)) STEP 2

   SELE ZM1

   LOCA FOR SUBS(XMK.NAME,I,2)=NR1

   ABC=ALLT(STR(RECN()))

   PXZ=PXZ+SUBS(′00000′,1,5-LEN(ABC))+ABC

   ENDFOR

   SELE XMK

   REPL ZZMM WITH PXZ

   SKIP

   ENDDO

  SELE XMK

  INDE ON ZZMM TO LS

  COPY TO LS

  ZAP

  USE XMK

  APPE FROM LS

  程序运行完毕后,我们会发现数据表中的姓名字段内容全部是按照笔划的多少进行排序的,完全实现了用户提出的要求。这里笔者提供了汉字按笔划排序的思路,有兴趣的读者也可以在其它编程语言中按照这个原理实现这个功能。

  摘自《赛迪网》 穆宣社/文

404 Not Found

404 Not Found


nginx


科技检索


中华网推荐

  • 1000名医生在线咨询

  • 中国足球队官方网站

  • 鸦片玫瑰(新版)

  • 精选股票天地

  • 闪光的flash教程

  • 中华网汽车世界

  • 为你的爱情出谋划策

  • 网文精选——野百合集

  • 世界文化遗产在中国

  • 历届香港小姐风姿集




  • 网络教室编辑信箱
    版权声明 | 本站检索 | 联系方法 | 刊登广告 | 使用说明 | 关于中华网 | 豁免条款

    版权所有 中华网