准备写个图形简繁转换的程序,大家说说怎样提高运行速度
最基本的方法就是一个字符一个字符的替换。而且需要在对照表顺查找字符。而做了统计,需要对照的汉字大约有2.2万个。如果说每个汉字都要在对照表中一个一个字的查找,速度显然是慢了。就着“齄”字,它是对照表中的最后一个字,如果需要替换字符串都是这个字,则每次都需要查2.2万次才能找到这个字。如果有100个这样的字,呵呵,那真的有些慢,虽然我没有试运行过。程序如下:[注意其中ChsStr为整个简体对照表,ChtStr为繁体对照表,简体和繁体的位置是一一对应的。]
Function Cht2Chs(Str As String) As String
Dim i As Long
Dim jAs Long
Dim tmpStr As String
Dim sAs String
For i = 1 To Len(Str)
s = Mid(Str, i, 1)
For j = 1 To Len(ChsStr)
If s = Mid(ChsStr, j, 1) Then
s = Mid(ChtStr, j, 1)
Exit For
End If
Next
tmpStr = tmpStr & s
Next
Cht2Chs = tmpStr
End Function
我已经找到一个比较快的方法,而且也写出来了。但希望大家一起来想,所以这种方法暂时不公布。
这个程序完成后,我会把主要代码公布出来。
用数据库试试:)
直接换字库文件行吗?
你不是说:“注意其中ChsStr为整个简体对照表,ChtStr为繁体对照表,简体和繁体的位置是一一对应的。”
想不到不一个个去找还有什么简便方法,看看老大的方法。
简繁字转换我用不着,不过想做一个选择所有文件完成这些文件内文字替换的程序,看看有什么可以参考的。
我还是不卖关子了。
我的方法非常简单,不需要在对照表中一个字一个字的查找对应的字。速度可提高上万倍。也不用数据库。
我是通过数组来解决。把简体字的ASCII码做为数组的下标,繁体字的ASCII码做为数组指定下标的值。
首先在程序运行时做一些填充数组的工作,然后就直接在程序中使用。
在替换字时直接取得字的ASCII码,通过该下标就可以直接读到对应的数组值。一转换出来就是繁体字了。
是不是非常简单和快。
还有没有更快的方法。
主要代码:
Function ChtToChs(Str As String) As String
Dim i As Long
Dim tmpStr As String
Dim sAs 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码与要比较字符的大小而决定是取前面一半的字符还是后面一半的字符继续进行比较。
能看看你的文件吗?
chsstr.dat
chtstr.dat
其实能不能体速关键看你程序的核心。
s = Chr(StrList(Asc(s) + 24159))
已经使速度发挥到极限了。
除非取数组中数值的速度影响程序的运行。
页:
[1]