网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 数据库类-> Foxpro-> 用Foxpro制作Windows输入法码表

用Foxpro制作Windows输入法码表
作者:佚名 来源:InterNet 加入时间:2005-1-31
相关文章
  • Visual FoxPro 9.0更强大了
  • 用FoxWeb在网上快速发布你的FOXPRO数据库
  • 为Visual FoxPro应用程序增加文件压缩功能
  • 用Visual FoxPro 5.0 设计数据文件结构浏览器
  • 利用Foxpro在网络环境下开发数据库管理软件经验点滴
  • Visual Foxpro生成任意打印字段报表的实现
  • 用FoxPro生成HTML文件
  • 优化 FoxPro 在网络上的性能
  • 如何修复被破坏的Foxpro数据库
  • 把FoxPro数据库转变成HTML表格
  • 相关书籍:
  • Visual FoxPro 6.0 中文版程序员指南
  • Visual Foxpro 6.0初级教程
  • VisualFoxpro 6.0中文版程序员指南
  • 摘   要: 本 文 介 绍 了 一 种 制 作Windows 汉 字 输 入 法 码 表 的 方 法 , 其 特 点 是 自 动 生 成 编 码 及 码 表 文 件 。
    关 键 词: 码 表 生 成 器 、 码 表 编 译 、 排 序 、 词 组 文 本 文 件 、 词 组 库 文 件 、Windows 码 表 文 件 。
    Windows 的 码 表 生 成 器 为 人 们 提 供 了 自 制 汉 字 输 入 法 的 手 段 , 但 在 编 译 前 需 做 大 量 的 预 备 工 作 , 在 实 际 操 作 过 程 中 存 在 着 以 下 三 方 面 的 问 题 , 现 以 制 作 五 笔 字 型 输 入 法 为 例 加 以 分 析:

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


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


    3. 编 译 限 制  Windows 中 的 码 表 生 成 器 在 对 没 有 按 编 码 排 序 的 码 表 文 件 编 译 时 需 要 排 序 , 但 这 时 它 能 实 际 接 受 的 最 大 编 码 数 为16000 条 左 右 , 超 过 的 部 分 则 无 法 处 理 , 而 且 排 序 时 间 较 长 。 针 对 上 述 问 题 , 我 用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 环 境 下 运 行 通 过 。

    [文章录入员:nancy]

    相关文章
  • Visual FoxPro 9.0更强大了
  • 用FoxWeb在网上快速发布你的FOXPRO数据库
  • 为Visual FoxPro应用程序增加文件压缩功能
  • 用Visual FoxPro 5.0 设计数据文件结构浏览器
  • 利用Foxpro在网络环境下开发数据库管理软件经验点滴
  • Visual Foxpro生成任意打印字段报表的实现
  • 用FoxPro生成HTML文件
  • 优化 FoxPro 在网络上的性能
  • 如何修复被破坏的Foxpro数据库
  • 把FoxPro数据库转变成HTML表格
  • 相关书籍:
  • Visual FoxPro 6.0 中文版程序员指南
  • Visual Foxpro 6.0初级教程
  • VisualFoxpro 6.0中文版程序员指南
  • 本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    Foxpro
    ACCESS
    MS SQL
    MySQL
    Oracle
    Foxpro
    PowerBuilder
    Sybase
    其它
    电脑教程阅读排行
    ·Visual FoxPro 9....
    ·VFP与Excel交互编程
    ·Visual Foxpro生成任...
    ·VFP访问外部数据源的几种方法
    ·为Visual FoxPro应用...
    ·如何用VFP的dbf进行SQL ...
    ·如何修复被破坏的Foxpro数据...
    ·用VFP6.0编写图片浏览器
    ·在VFP报表中实现每页打印指定记...
    ·利用Foxpro在网络环境下开发...