Как сравнить 2 одинаковые строки по буквам и выделить различия? - PullRequest
3 голосов
/ 18 мая 2010

У нас есть 2 базы данных, которые должны иметь соответствующие таблицы. У меня есть отчет (In-Production), который сравнивает эти поля и отображает их пользователю в форме MS-Access (стиль непрерывной формы) для исправления.

Это все хорошо, за исключением того, что может быть трудно найти различия. Как я могу отформатировать эти поля, чтобы выделить / выделить курсивом / закрасить различия?

"Ленивый пес перепрыгнул через коричневого лис ".
«Ленивая собака перепрыгнула коричневая лиса. "

(легче увидеть различия между 2 одинаковыми текстовыми полями, если они каким-то образом выделены)

«Ленивый пес перепрыгнул через бурого лиса».
«Ленивый пес перепрыгнул через коричневого лиса. »

Поскольку мы говорим о форме в MS Access, у меня нет больших надежд. Но я знаю, что я не первый, у кого эта проблема. Предложения?


Редактировать

Я пошел с решением Рему. Это не мое идеальное решение, но оно «достаточно хорошее», тем более что у меня нет вариантов форматированного текста. В запросе, который строит исходную таблицу, я использовал 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 ]

4 голосов
/ 19 мая 2010

Форматированный текст поддерживается и встроен в 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

Я действительно не думаю, что проблема заключается в создании строки, я НАСТОЯЩАЯ трудная проблема, когда строки имеют разную длину. Это FAR из тривиального упражнения по кодированию для отображения различий в двух строках. Вы, конечно, можете показать, где они отличаются, но выделение каждого различия представляет собой трудную проблему кодирования.

0 голосов
/ 19 мая 2010

Access 2007 представил значительно улучшенное расширенное текстовое поле, которое понимает HTML, и если бы я чувствовал, что важно сделать что-то большее, чем предложение @ Remou о выделении отличающегося текста, я бы углубился в это.

Я бы гораздо больше беспокоился о том, как написать код, который выяснит, что отличается между двумя примерами. Это кажется мне намного более сложной проблемой.

0 голосов
/ 18 мая 2010

Вы можете посмотреть, используя элемент управления с расширенным текстовым полем. Это позволит вам изменить шрифты, жирный шрифт, курсив и т. Д.

Есть несколько вопросов. Если вы используете Access 2003 или XP, вам следует избегать Rich TextBox Control 6.0 http://support.microsoft.com/kb/838010. У него есть неприятные проблемы с безопасностью, и Microsoft говорит, что его следует избегать любой ценой.

Если вы используете 2003 или XP, вы можете взглянуть на этот расширенный текстовый элемент управления http://www.lebans.com/richtext.htm Он старше, но должен работать с 2003 и XP. Я никогда не использовал его лично, поэтому я не уверен, насколько хорошо он работает.

0 голосов
/ 18 мая 2010

Вы можете установить selstart и sellength, это выберет часть текстового поля. Есть некоторые опасности, в которых пользователь может опереться на клавишу и отменить выбор.

...