0

这需要一个解决方案,从 VB6 迁移到 Access 的代码如下。我有一个比较来自 VB6 的字符的功能,我是 VB6 的新手用户,主要在 VBA 平台上工作。我需要在 MS Access 中设置一个类或更好的方法,以便在不使用 UDT 的情况下逐个字符地检查拼写错误。

Mytypolist 作为数组引用以下数据集: QWA WESAQ ERDSW RTFDE TYGFR YUHGT UIJHY IOKJU OPLKI PLO AQWSZ SEDXZA DRFCXSE FTGVCDR GYHBVFT HUJNBGY JIKMNHU KOLMJI LPKO ZASX XZSDC CXDFV VCFGB BVGHN NBHJM MNJK

上面的数据用于比较一个字符是否在一个单词中输入错误。例如。如果我在 Auebec 中使用 A 而不是我要输入 Quebec 的意思,那么我感兴趣的集群是 QWA;WESAQ;AQWSZ; 或基于接近度的标准英语 Qwerty 键盘上的任何其他 Q 排列。这不仅适用于 Q,而且适用于整个字母集,无论大小写如何,因此 c 有自己的可能的错字匹配等集群。

在 UDT(用户定义类型)的 VB6 设置中:'为拼写错误声明 UDT 类型

Public Type Mytypos
    Rightrkey As String * 1
    PossibleKey As String * 8
End Type
'declare arrays and variable for master list and typos
Public Masterlist() As String
Public Mytypolist(26) As Mytypos
Public Matchkey As Mytypos

以下函数比较两个单词;并通过计算 currentpct 分数来分配相似度:

Public Function CompareCharacters(ByRef MasterWord As String, _
ByRef Checkword As String, ByRef CurrentPCT As Double, _
ByRef WordVal As Long) As Double

'define function variables
Dim ChrCount As Long
Dim ChrValue As Long
Dim loop1 As Long
Dim loop2 As Long

'define the letter values
If Len(MasterWord) > Len(Checkword) Then
    ChrCount = Len(MasterWord) * 2
Else
    ChrCount = Len(Checkword) * 2
End If

ChrValue = 1 / ChrCount

'say CURRENT PCT has a value of 10%

'check each letter for a match in current word position
For loop1 = 1 To Len(Checkword)

            'check for typo errors (key proximity)
            For loop2 = 0 To UBound(Mytypolist)
                Matchkey = Mytypolist(loop2)
                'if indexkey = letter in masterword
                If Matchkey.Rightrkey = Mid(MasterWord, loop1, 1) Then
                    'does the letter in the checkword exist in the proximity keylist
                    If InStr(1, Matchkey.PossibleKey, Mid(Checkword, loop1, 1), vbTextCompare) > 0 Then
                        'value for letter found in proximity keylist
                        CurrentPCT = CurrentPCT + ChrValue
                    End If
                    Exit For
                End If
            Next loop2

Next loop1
CompareCharacters = CurrentPCT

End Function

如果您可以向我发布一个可能不会产生编译器问题的数组/类解决方案(VBA 中的字符串 UDT 是一个问题)。请立即查看!

4

1 回答 1

0

由于您有 1 个字符到 8 个字符的东西,因此最好有一个完整的映射。替换这个的东西:

Public Type Mytypos
    Rightrkey As String * 1
    PossibleKey As String * 8
End Type

至:

PossibleKeys(255) As String * 8

这样,每个字符(从 0 到 255)都会有 8 个字符的映射。无需UDT!

于 2013-08-19T16:13:46.487 回答