0

これには解決策が必要です。VB6 から Access に移行するためのコードは以下のとおりです。私は VB6 の文字を比較する機能を持っています。私は VB6 の初心者ユーザーであり、主に VBA プラットフォームで作業しています。UDTを使用せずにタイプミスを文字ごとにチェックするために、MS Accessでクラスまたはより良い方法をセットアップする必要があります。

配列としての Mytypolist は、次のデータセットを参照します。

上記のデータは、文字が単語内でタイプミスされたかどうかを比較するために使用されます。ケベックと入力する意味ではなく、Auebec のように A を使用すると、関心のあるクラスターは 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

次の関数は 2 つの単語を比較します。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 に答える