如何逐个字母地比较2个相似的字符串并突出显示差异?

时间:2010-05-18 14:24:10

标签: ms-access vba access-vba

我们有2个应该拥有匹配表的数据库。我有一个(生产中)报告,它比较这些字段并以MS-Access形式(连续表格样式)显示给用户以进行更正。

除了很难找到差异之外,这一切都很好。如何将这些字段格式化为粗体/斜体/颜色差异?

  

“懒狗跳过棕色   狐狸。“
  “懒狗跳过了   棕色的狐狸。“

(一旦以某种方式突出显示两个类似文本字段之间的差异,就更容易了)

  “这只懒狗跳过棕色的狐狸。”   “懒狗跳过棕色的狐狸。”

由于我们在谈论MS Access中的表单,我没有很大的希望。但我知道我不是第一个遇到这个问题的人。建议?


修改

我已经选择了Remou的解决方案。这不是我理想的解决方案,但它“足够好”,特别是因为我没有任何富文本选项。在构建源表的查询中,我使用space()添加尾随空格以使两个字段长度相等。然后我将此代码添加到两个字段的Click事件中(TextA和TextB与另一个字段相反):

    Dim i As Integer
    For i = 1 To Len(Me.TextA.Text)
        If Right(Left(Me.TextA.Value, i), 1) <> _
        Right(Left(Me.TextB.Value, i), 1) Then
            Me.TextA.SelStart = i - 1
            Me.TextA.SelLength = Len(Me.TextA.Text)
            Exit For
        End If
    Next i

结果是,当您单击每个字段时,会选择第一个字符串末尾的“不同字母”。我能够快速地进行实验,编码和发短信,所以我选择了它。但我迟早会重新考虑这个想法,因为这个概念在几个项目中都很有用。

4 个答案:

答案 0 :(得分:4)

支持富文本并将其内置到最后两个版本的ms-access中。因此,您可以构建如下屏幕:

alt text

上面的第3列简单地绑定到显示两列之间差异的函数。以上是使用以下第3列/函数代码运行的实际屏幕截图。

这里是代码:

bolSame = True
i1 = 1: i2 = 1
   For i = 1 To Len(c2t)
      c1 = Mid(c1t, i1, 1)
      c2 = Mid(c2t, i2, 1)
      s = c2
      If c1 = c2 Then
         If bolSame = False Then
            bolSame = True
            s = "</strong></font>" & s
         End If
         i1 = i1 + 1: i2 = i2 + 1
      Else
         If bolSame = True Then
            bolSame = False
            s = "<font color=red><strong>" & s
         End If
         i1 = i1 + 1: i2 = i2 + 1
      End If
      strResult = strResult & s
   Next

If bolSame = False Then
   strResult = strResult & "</strong></font>"
End If
MyCompare = strResult

我真的不认为这里的问题是产生一个字符串,我真正的难题是当字符串长度不同时。通过一个简单的编码练习来显示两个字符串的差异。您当然可以在病房中显示它们的不同之处,但突出显示每个差异是一个困难的编码问题。

答案 1 :(得分:0)

您可以设置selstart和sellength,这将选择文本框的一部分。存在一些危险,因为用户可能依靠钥匙并清除选择。

答案 2 :(得分:0)

您可以考虑使用富文本框控件。这将允许您更改字体,粗体,斜体等。

有一些问题。如果使用Access 2003或XP,那么你应该避免使用Rich TextBox Control 6.0 http://support.microsoft.com/kb/838010它有严重的安全问题,微软表示应该不惜一切代价避免它。

如果你使用的是2003或XP,你可以查看这个富文本控件http://www.lebans.com/richtext.htm它的旧版本但应该适用于2003和XP。我从来没有亲自使用它,所以我不确定它的效果如何。

答案 3 :(得分:0)

Access 2007引入了一个大大改进的富文本框,可以理解HTML,如果我认为做一些比@ Remou选择不同文本的建议更重要,我会深入研究。

我会更关心如何编写代码来确定两个例子之间的不同之处。在我看来,这似乎是一个更难,更难的问题。