• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • 用Foxpro制作Windows输入法码表

        摘   要: 本 文 介 绍 了 一 种 制 作Windows 汉 字 输 入 法 码 表 的 方 法 , 其 特 点 是 自 动 生 成 编 码 及 码 表 文 件 。

      关 键 词: 码 表 生 成 器 、 码 表 编 译 、 排 序 、 词 组 文 本 文 件 、 词 组 库 文 件 、Windows 码 表 文 件 。

      Windows 的 码 表 生 成 器 为 人 们 提 供 了 自 制 汉 字 输 入 法 的 手 段 , 但 在 编 译 前 需 做 大 量 的 预 备 工 作 , 在 实 际 操 作 过 程 中 存 在 着 以 下 三 方 面 的 问 题 , 现 以 制 作 五 笔 字 型 输 入 法 为 例 加 以 分 析:

      1. 格 式 问 题   我 们 虽 然 能 从 许 多 汉 字 系 统 中 取 得 五 笔 字 型 码 表, 但 这 些 码 表 格 式 很 少 与Windows 码 表 格 式 相 同, 因 此 在 用 码 表 生 成 器 编 译 前 需 进 行 格 式 调 整;

      2. 编 码 问 题   从 任 何 一 个 汉 字 系 统 都 只 能 得 到 数 量 有 限 的 词 条 , 因 此 我 们 有 必 要 根 据 需 要 自 建 词 组 , 或 把 非 五 笔 字 型 输 入 法( 如Windows3.2 中 的 郑 码) 中 大 量 的 词 组 增 加 到 五 笔 字 型 输 入 法 中 , 而 为 这 些 词 组 逐 一 人 工 编 码 既 费 时 又 易 错;

      3. 编 译 限 制  Windows 中 的 码 表 生 成 器 在 对 没 有 按 编 码 排 序 的 码 表 文 件 编 译 时 需 要 排 序 , 但 这 时 它 能 实 际 接 受 的 最 大 编 码 数 为16000 条 左 右 , 超 过 的 部 分 则 无 法 处 理 , 而 且 排 序 时 间 较 长 。 针 对 上 述 问 题 , 我 用Foxpro 编 制 了 一 段 程 序 , 能 较 满 意 地 解 决 以 上 问 题 ,

      卡拉OK字幕着色动态显示
      VFP编辑框中实现自动更正的方法,Visual FoxPro 9.0更强大了,如何用VFP的dbf进行SQL Server 7.0 的分布式查询,VFP智能感应的二次开发,谈两种数据库内容HTML格式的输出方法,用FoxWeb在网上快速发布你的FOXPRO数据库,在VFP5.0中实现中英文自动切换,在VFP中实现跟变式组合框及椭圆图形菜单,通过编程运行拨号网络连接,VFP中实现在浏览器中运行应用程序方法,为Visual FoxPro应用程序增加文件压缩功能,在VFP中模拟动画,用Visual FoxPro 5.0 设计数据文件结构浏览器,VFP表跟踪实现方法,让VFP程序在浏览器中运行,怎样在Visual FoxPro 中增加与去除网络联接,谈谈VFP和SQL SERVER搭配做C/S系统,卡拉OK字幕着色动态显示,利用Foxpro在网络环境下开发数据库管理软件经验点滴,用Foxpro制作Windows输入法码表
      Visual Foxpro

      其 特 点 为:

      自 动 生 成 编 码 。 只 需 从 任 一 汉 字 输 入 法 中 提 取 词 组 并 舍 去 其 编 码 , 再 不 需 做 任 何 格 式 调 整 , 这 样 我 们 就 会 有 众 多 词 组 源 可 以 利 用 。

      自 动 生 成Windows 的 码 表 文 件 。 由 于 在 生 成 码 表 文 件 时 就 已 对 编 码 做 了 排 序 处 理 , 因 而 无 需Windows 的 码 表 编 译 器 再 排 序(Sort=0) , 从 而 不 但 省 去 了 费 时 的 排 序 过 程 , 而 且 使 编 码 数 目 几 乎 没 有 限 制 。

      一 、 程 序 说 明

      本 程 序 涉 及 的 库 文 件 结 构 为:

      Field Field Name Type Width Dec

      1 CODE Character 4

      2 WORD Character 22

      程 序 运 行 之 前 , 需 制 作 两 个 库 文 件:" 单 字.DBF" 和" 字 码.DBF" 。 " 单 字.DBF" 存 放 每 个 汉 字 的 一 、 二 、 三 、 四 级 五 笔 字 型 编 码 。" 单 字.DBF" 可 以 从 其 他 汉 字 系 统 的 五 笔 字 型 码 表 文 件 中 取 得 。 将 取 得 的 单 个 汉 字 及 其 编 码 添 加 到" 单 字.DBF" 即 可 。

      " 字 码.DBF" 中 的Word 字 段 是6850 个 汉 字 ,Code 字 段 是 每 个 汉 字 五 笔 字 型 编 码 的 前 二 码 。" 字 码.DBF" 可 以 利 用" 单 字.DBF" 制 作: 先 删 除 其 中 的 一 级 简 码, 再 取 得 每 个 汉 字 和 其 编 码 的 前 两 码, 最 后 删 除 相 同 的 记 录 。

      二 、 运 行 过 程

      1. 运 行 程 序 的 第 一 步 , 将 要 增 加 的 词 组 文 本 文 件&AppFile..txt 增 补 到 库 文 件&AppDBFile..dbf 的Word 字 段 中;

      2. 调 用 过 程DelExistWord 删 除 库 文 件&AppDBFile..dbf 中 与 词 组 库 文 件" 词 组 库.dbf" 重 复 的 记 录 , 以 保 证 增 加 时 不 会 重 复 加 入" 词 组 库.dbf" 中 已 有 的 词 组;

      3. 调 用 过 程Generate_WBCode 生 成 库 文 件&AppDBFile..dbf 中Code 字 段 的 五 笔 字 型 编 码 。 首 次 运 行 时 , 本 程 序 将 生 成 库 文 件" 词 组 库.dbf" , 以 后 运 行 时 , 会 把 欲 增 加 的 词 组 及 其 编 码 增 补 到 库 文 件" 词 组 库.dbf" 中 。 在 生 成 编 码 时 要 用 到 库 文 件" 字 码.dbf" 及 其 关 于Word 字 段 的 索 引 文 件" 字 码.cdx";

      4. 调 用 过 程ToWinForm 生 成Windows 码 表 文 件 。 运 行 中 用" 单 字.dbf" 和" 词 组 库.dbf" 合 成 所 有 汉 字 、 词 组 的 编 码 库 文 件MBase.dbf 并 生 成 其 索 引 文 件MBase.cdx 。 最 后 由MBase.bdf 生 成Windows 的 码 表 文 件" 五 笔 字 型.txt" 。

      三 、 程 序 清 单

      Set Talk Off

      Set Notify Off

      Clear

      * 将此程序所在路径设为默认路径

      ProgPath=Substr(SYS(16),1,RAT('\',SYS(16))-1)

      Set Default To &ProgPath

      AppFile = GetFile('TXT', '要增加的词组文件.TXT:', '选择')

      AppDBFile= Stuff(AppFile,AT('TXT',AppFile),3,'DBF')

      If File(AppDBFile)

      Delete File &AppDBFile

      EndIf

      Create &AppDBFile From Struc

      Use &AppDBFile Alias App

      Append From &AppFile Fields Word Deli

      Delete All For Len(alltrim(word))=0

      Pack

      If File('词组库.DBF')

      Set Message To "删除与'词组库.DBF'重复的词组"

      Do DelExistWord

      EndIf

      Set Message To '正在生成编码'

      Do Generate_WBCode

      If File('词组库.DBF')

      Set Message To '增补到词组库并重新索引'

      Use词组库

      Append From &AppDBFile

      Else

      Set Message To '建立词组库和其索引'

      Copy File &AppDBFile To词组库.DBF

      Use词组库

      Index On code Tag code

      Index On Word Tag Word Of词组库

      EndIf

      Use

      Delete File &AppDBFile

      Set Message To '正在生成Windows的码表文件'

      Do ToWinForm

      Set Message To 'Windows格式码表文件生成完毕!'

      Wait Window TimeOut 5

      Set Talk On

      Set Notify On

      Set Message To

      Return

      * ******** 子过程 ***********

      &&检查是否和'词组库.DBF'有重码

      Procedure DelExistWord

      Select 0

      Use词组库

      Set Order to Word

      Select App

      Set Relation To Word Into词组库

      Go Top

      Do While .Not.Eof('App')

      IF .Not.Eof('词组库')

      Delete

      EndIf

      Skip

      EndDo

      Pack

      Select词组库

      Use

      Return

      &&生成五笔字型编码

      Procedure Generate_WBCode

      Private WBCode,WordString,WordLength,I

      Select 0

      Use字码 Order Tag Word of字码

      Select App

      Goto Top

      Do While .Not.Eof('App')

      WBCode=''

      WordString=Word

      WordLength=Len(AllTrim(WordString))

      Select字码

      Do Case

      Case WordLength=4

      For I=1 TO 2

      ZI=SubStr(WordString,2*I-1,2)

      Find &ZI

      WBCode=WBCode+Code

      Next

      Case WordLength=6

      For I=1 TO 3

      ZI=SubStr(WordString,2*I-1,2)

      Find &ZI

      Do Case

      Case I=1 .OR. I=2

      WBCode=WBCode+SubStr(Code,1,1)

      Case I=3

      WBCode=WBCode+Code

      EndCase

      Next

      Case WordLength=8

      For I=1 TO 4

      ZI=SubStr(WordString,2*I-1,2)

      Find &ZI

      WBCode=WBCode+SubStr(Code,1,1)

      Next

      Case WordLength>8

      For I=1 TO 3

      ZI=SubStr(WordString,2*I-1,2)

      Find &ZI

      WBCode=WBCode+SubStr(Code,1,1)

      Next

      ZI=SubStr(WordString,WordLength-1,2)

      Find &ZI

      WBCode=WBCode+SubStr(Code,1,1)

      EndCase

      Select App

      Replace Code With WBCode

      Skip

      EndDo

      Close Databases

      Return

      &&生成Windows格式码表文件

      Procedure ToWinForm

      Private Head,Word_Code,txt,i

      If File('MBase.DBF')

      Delete File MBase.DBF

      Delete File MBase.CDX

      EndIf

      Create MBase From Struc

      Append From单字

      Append From词组库

      Index On Code Tag Code Of Mbase

      Dimension MbHead[7]

      Dimension Word_Code[2]

      MbHead[1]= '[Description]'

      MbHead[2]= 'Name=五笔字型'

      MbHead[3]= 'MaxCodes = 4'

      MbHead[4]= "UsedCodes='abcdefghijklmnopqrstuvwxy"

      MbHead[5]= 'WildChar=z'

      MbHead[6]= 'Sort=0'

      MbHead[7]= '[text]'

      MBText= '五笔字型.txt'

      txt=FCreate(MBText)

      For i=1 to 7

      = Fputs(txt,MbHead[i])

      Next

      Goto Top

      Do While .Not.Eof()

      Scatter TO Word_Code

      Skip

      = Fputs(txt,AllTrim(Word_Code[2])+AllTrim(Word_Code[1]))

      EndDo

      Use

      =FClose(txt)

      Delete File MBase.DBF

      Delete File MBase.CDX

      Return

      该 程 序 使 用 的 机 器 为386DX33,4M , 在Foxpro For Windows2.5b 环 境 下 运 行 通 过 。

      利用Foxpro在网络环境下开发数据库管理软件经验点滴
      VFP编辑框中实现自动更正的方法,Visual FoxPro 9.0更强大了,如何用VFP的dbf进行SQL Server 7.0 的分布式查询,VFP智能感应的二次开发,谈两种数据库内容HTML格式的输出方法,用FoxWeb在网上快速发布你的FOXPRO数据库,在VFP5.0中实现中英文自动切换,在VFP中实现跟变式组合框及椭圆图形菜单,通过编程运行拨号网络连接,VFP中实现在浏览器中运行应用程序方法,为Visual FoxPro应用程序增加文件压缩功能,在VFP中模拟动画,用Visual FoxPro 5.0 设计数据文件结构浏览器,VFP表跟踪实现方法,让VFP程序在浏览器中运行,怎样在Visual FoxPro 中增加与去除网络联接,谈谈VFP和SQL SERVER搭配做C/S系统,卡拉OK字幕着色动态显示,利用Foxpro在网络环境下开发数据库管理软件经验点滴,用Foxpro制作Windows输入法码表
      Visual Foxpro

    • 0
    • 0
    • 0
    • 78
    • 单栏布局 侧栏位置: