我们知道,霍夫曼编码的基础是进行词频统计。然后依据统计数据,构建霍夫曼树,进而得到霍夫曼编码表。利用霍夫曼编码表,就可以进行压缩工作了。

    这里,用VBS的二维数组,来对一个字符串str = "0123456789abcdef2222222aaaaabbbcc",进行词频统计,然后进行排序。


Public Function cnt(str,x)
    str = UCase(str)
    x = UCase(x)
    cnt = UBound(Split(str,x))
End Function

Dim a(15,1),i,j,k,l

str = "0123456789abcdef2222222aaaaabbbcc"

For i =  & h0 To & hf
    a(i,0) = Hex(i)
    a(i,1) = cnt(str,Hex(i))
Next

For l = 0 To UBound(a)
    data = data & "未排序结果为:" & a(l,0) & "出现次数" & a(l,1) & vbLf
Next
MsgBox data
data = ""

For j = 0 To 15
    For k = j To 15
        If a(j,1) < a(k,1)Then
            tmp1 = a(j,1)
            a(j,1) = a(k,1)
            a(k,1) = tmp1
            tmp2 = a(j,0)
            a(j,0) = a(k,0)
            a(k,0) = tmp2
        End If
    Next
Next

For l = 0 To UBound(a)
    data = data & "排序后结果为;" & a(l,0) & "出现次数" & a(l,1) & vbLf
Next
MsgBox data
data = ""

    有了这个基础的词频统计功能,那么,我们就可以继续进行字符串压缩工作了,更进一步,就是文件压缩了。

    首先,用VBS将文件进行二进制读取;然后,用词频统计对文件词频进行统计;接着,依据统计数据,构建霍夫曼树,进而得到霍夫曼编码表;

    最后,压缩。