乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 116|回复: 7

准备写个图形简繁转换的程序,大家说说怎样提高运行速度

[复制链接]

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2005-9-11 21:27:00 | 显示全部楼层 |阅读模式
最基本的方法就是一个字符一个字符的替换。而且需要在对照表顺查找字符。而做了统计,需要对照的汉字大约有2.2万个。如果说每个汉字都要在对照表中一个一个字的查找,速度显然是慢了。就着“齄”字,它是对照表中的最后一个字,如果需要替换字符串都是这个字,则每次都需要查2.2万次才能找到这个字。如果有100个这样的字,呵呵,那真的有些慢,虽然我没有试运行过。程序如下:
[注意其中ChsStr为整个简体对照表,ChtStr为繁体对照表,简体和繁体的位置是一一对应的。]
  1. Function Cht2Chs(Str As String) As String
  2.     Dim i As Long
  3.     Dim j  As Long
  4.     Dim tmpStr As String
  5.     Dim s  As String
  6.     For i = 1 To Len(Str)
  7.         s = Mid(Str, i, 1)
  8.         For j = 1 To Len(ChsStr)
  9.             If s = Mid(ChsStr, j, 1) Then
  10.                 s = Mid(ChtStr, j, 1)
  11.                 Exit For
  12.             End If
  13.         Next
  14.         tmpStr = tmpStr & s
  15.     Next
  16.     Cht2Chs = tmpStr
  17. End Function
我已经找到一个比较快的方法,而且也写出来了。但希望大家一起来想,所以这种方法暂时不公布。
这个程序完成后,我会把主要代码公布出来。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2005-9-12 11:33:00 | 显示全部楼层
用数据库试试:)
回复

使用道具 举报

13

主题

107

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2005-9-12 12:54:00 | 显示全部楼层
直接换字库文件行吗?
你不是说:“注意其中ChsStr为整个简体对照表,ChtStr为繁体对照表,简体和繁体的位置是一一对应的。”


回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2005-9-12 18:34:00 | 显示全部楼层
想不到不一个个去找还有什么简便方法,看看老大的方法。
简繁字转换我用不着,不过想做一个选择所有文件完成这些文件内文字替换的程序,看看有什么可以参考的。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2005-9-12 19:33:00 | 显示全部楼层
我还是不卖关子了。
我的方法非常简单,不需要在对照表中一个字一个字的查找对应的字。速度可提高上万倍。也不用数据库。
我是通过数组来解决。把简体字的ASCII码做为数组的下标,繁体字的ASCII码做为数组指定下标的值。
首先在程序运行时做一些填充数组的工作,然后就直接在程序中使用。
在替换字时直接取得字的ASCII码,通过该下标就可以直接读到对应的数组值。一转换出来就是繁体字了。
是不是非常简单和快。
还有没有更快的方法。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2005-9-12 21:40:00 | 显示全部楼层
主要代码:[code]
Function ChtToChs(Str As String) As String
    Dim i As Long
    Dim tmpStr As String
    Dim s  As String
    Dim StrList As Variant
    StrList = GetStrList
    For i = 1 To Len(Str)
        s = Mid(Str, i, 1)
        If Asc(s) 复制代码可以看到,我把整个简体表做为需要转换的字符串,整个运行速度中,列表法是最快的,而位置法则还不错。但查找法则不可行。
另外,查找法还可以进行优化,优化的条件是对照表中原始表(即简体表)字符按ASCII码排序,这样则可以通过筛选来一半一半筛选。如20个字,取第10个字,看ASC码与要比较字符的大小而决定是取前面一半的字符还是后面一半的字符继续进行比较。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2005-9-13 21:17:00 | 显示全部楼层
能看看你的文件吗?
chsstr.dat
chtstr.dat
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2005-9-16 06:48:00 | 显示全部楼层
其实能不能体速关键看你程序的核心。
s = Chr(StrList(Asc(s) + 24159))

已经使速度发挥到极限了。
除非取数组中数值的速度影响程序的运行。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 11:35 , Processed in 1.041971 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表