Сравнение двух больших текстов - Visual Basic .NET

  1. Есть два больших текста, отличающиеся друг от друга несколькими словами. Как выявить эти слова? Как сравнить эти тексты?


textual

Код:

Imports System.IO
 
Public Class Form1
 
    Dim i As Long
    Dim j As Long
    Dim tx1 As String
    Dim tx2 As String
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        i = 0
        j = 0
        ListBox1.Items.Clear()
        ListBox2.Items.Clear()
        Dim drt As Boolean
        Dim Text1 As String = RichTextBox1.Text  ' "apple    pear banana  "
        Dim TestArray1() As String = Split(Text1)
        ' TestArray1 holds {"apple", "", "", "", "pear", "banana", "", ""}
        Dim LastNonEmpty1 As Integer = -1
        For i As Integer = 0 To TestArray1.Length - 1
            If TestArray1(i) <> "" Then
                LastNonEmpty1 += 1
                TestArray1(LastNonEmpty1) = TestArray1(i)
                ListBox1.Items.Add(TestArray1(LastNonEmpty1))
            End If
        Next
        ReDim Preserve TestArray1(LastNonEmpty1)
        ' TestArray1 now holds {"apple", "pear", "banana"}
        '/
        Dim Text2 As String = RichTextBox2.Text  ' "apple    pear banana  "
        Dim TestArray2() As String = Split(Text2)
        ' TestArray2 holds {"apple", "", "", "", "pear", "banana", "", ""}
        Dim LastNonEmpty2 As Integer = -1
        For i As Integer = 0 To TestArray2.Length - 1
            If TestArray2(i) <> "" Then
                LastNonEmpty2 += 1
                TestArray2(LastNonEmpty2) = TestArray2(i)
                ListBox2.Items.Add(TestArray2(LastNonEmpty2))
            End If
        Next
        ReDim Preserve TestArray2(LastNonEmpty2)
        '/ Построчное сравнение слов
        Dim kls As Long
        If ListBox1.Items.Count > ListBox2.Items.Count Then
            kls = ListBox2.Items.Count
            drt = True
        Else
            kls = ListBox1.Items.Count
            drt = False
        End If
        For i = 0 To kls - 1
            If ListBox1.Items(i) <> ListBox2.Items(i) Then
                '       MsgBox(ListBox1.Items(i) & "   " & ListBox2.Items(i))
                tx1 = ListBox1.Items(i) ' Слово за которым пропущенное слово
                tx2 = ListBox2.Items(i)  ' Слово, отсутствующее в ListBox1
                If drt = True Then
                    FindMyString(tx1)
                    j = ListBox1.FindString(tx1, i)
                    ListBox1.SelectedIndex = j
                    RichTextBox1.Select(RichTextBox1.Text.IndexOf(ListBox1.Items(i)), Len(ListBox1.Items(i)))
                    RichTextBox1.SelectionColor = Color.Red
                    RichTextBox1.HideSelection = False
                    RichTextBox1.SelectionStart = RichTextBox1.Text.Length
                    RichTextBox1.ScrollToCaret()
                    Exit For
                Else
                    ' Если слово отсутствует в 1-м ричбоксе
                    FindMyString(tx2)
                    j = ListBox2.FindString(tx2, i)
                    ListBox2.SelectedIndex = j
                    '   MsgBox(ListBox2.Items(i))
                    RichTextBox2.Select(RichTextBox2.Text.IndexOf(ListBox2.Items(i)), Len(ListBox2.Items(i)))
                    RichTextBox2.SelectionColor = Color.Red
                    RichTextBox2.HideSelection = False
                    RichTextBox2.SelectionStart = RichTextBox2.Text.Length
                    RichTextBox2.ScrollToCaret()
                    Exit For
                End If
                '//
            End If
 
        Next
    
        '/
 
        '//
    End Sub
    '/
Private Sub FindMyString(ByVal searchString As String)
        ' Ensure we have a proper string to search for.
        If searchString <> String.Empty Then
            ' Find the item in the list and store the index to the item.
            Dim index As Integer = listBox1.FindString(searchString)
            ' Determine if a valid index is returned. Select the item if it is valid.
            If index <> -1 Then
                listBox1.SetSelected(index, True)
            Else
                ' MessageBox.Show("The search string did not match any items in the ListBox")
            End If
        End If
    End Sub
    '//
End Class


Похожие ответы
  1. Народ, приветствую, подскажите, плж, следующую вещь. Имеется массив из двух измерений 30 х динамическое значение Мне нужно обратится прямо к столбцу/строке из 30-ти значений Т.е. напримерvb.net1 2 ReDim TwoSidedArr as string(30,2)={{1,2,3 ... 29,30},{1,2,3 ... 29,30}} ReDim SingleArr as string(30) = TwoSidedArr(1)где SidedArr это массив (30,q) элементов. В Php такое возможно, vb.net не могу найти. Спасибо.

  1. Здравствуйте,помогите пожалуйста, нужно чтобы открывалось два окна одновременно, на одном секундомер а на другом таймер, код уже написан, как это реализовать?

  1. Таблица имеет два поля: KOD, NAME KOD - пишется в таблицу NAME - отображается в комбобоксе Надо: Чтобы KOD, как и прежде, писался в таблицу, а в комбобоксе отображались и KOD и NAME в одну строку

  1. В общем задача такая, есть форма с двумя datagridview в splitcontainer-е. Datagridview заполняются из базы Access из двух связанных таблиц. И... в общем ничего не получается, datagridview пустые. Первоначально пробовал раздельно заполнять datagridview и для меня стало полной неожиданностью, что нельзя отдельно работать с datagridview. Попробовал как на MSDN описано. Прилагаю код. Соединение,DataSet и DataTable описаны и созданы заранее. В чем ошибка?vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45     Sub DGVfillMat()         Dim strQuery As String          ' строка запроса         Dim qSQL As OleDbCommand        ' запрос         Dim DA As OleDbDataAdapter      ' обработчик запросов         Dim BS As New BindingSource     ' соеденитель datatable и datagrid           Dim strQuery2 As String                   Dim qSQL2 As OleDbCommand         Dim DA2 As OleDbDataAdapter         Dim BS2 As New BindingSource           strQuery = "SELECT * FROM SetMat ORDER BY [_Name] ASC"         strQuery2 = "SELECT * FROM SetMatSelect ORDER BY [_Name] ASC"         CN.ConnectionString = strConnect ' назначаем строку соединения         qSQL = New OleDbCommand(strQuery, CN)         qSQL2 = New OleDbCommand(strQuery2, CN) ' создаем запрос         Try             DT_SetMat.Reset()             DT_SetMatSel.Reset() ' предварительно очищаем кэш таблицы             CN.Open() ' открываем соединение             qSQL.ExecuteNonQuery()             qSQL2.ExecuteNonQuery() ' выполняем запрос         Catch ex As Exception ' если ошибка             MsgBox("Ошибка загрузки данных в таблицу!", MsgBoxStyle.Critical)             Exit Sub         Finally             CN.Close() ' закрываем соединение         End Try         DA = New OleDbDataAdapter(qSQL)         DA2 = New OleDbDataAdapter(qSQL2) ' получаем результат запроса         DA.Fill(DS, "SetMat")         DA2.Fill(DS, "SetMatSelect") ' отправляем результат в dataset         ' создаем связь         Dim relation As New DataRelation("DR", DT_SetMat.Columns(0), DT_SetMatSel.Columns(0))         DS.Relations.Add(relation)           DT_SetMat = DS.Tables("SetMat")         DT_SetMatSel = DS.Tables("SetMatSelect")         BS.DataSource = DS         BS2.DataSource = DS ' связываем соеденитель с таблицей         Me.DGV_Mat.DataSource = BS         Me.DGV_SelMat.DataSource = BS2 ' связываем соеденитель с datagrid         Me.DGV_Mat.DataMember = "SetMat"         Me.DGV_SelMat.DataMember = "SetMatSelect"     End Sub

  1. Всем доброго здоровичка!!! Помогите пожалуйста с программой: На форме 2 листбокса. Они заполняются случайно из массивов. В 1-м лб половина слова, во 2-м лб 2-я половина слова. Во 2-м лб слова перемешиваются случайно, чтобы не была видна связь слов. Человек выбирает слово из 1-го лб, выбирает слово из 2-го лб. Рядом с лб есть лейблы. Кнопка склеивает и получается новое слово, удаляет их из лб1 и лб2 и помещает новое слово в очередной лейбл. Теперь проблемы: 1) как сделать запись нового слова в очередной лейбл? 2) после удаления, во 2-м лейбле слова становятся правильно под первые слова, а надо их опять перемешать. 3) программа смотрит новое слово в массиве и если правильно, меняет цвет фона на зелёный, если нет - красный. Программу выкладываю. Заранее спасибо!!!

  1. Всем привет! Мужики, помогите решить задачу. В RTB1 есть список строк. В каждой новой строке записана фамилия и имя, например: Иванов Иван Петров Петр ... Задача. 1. Вывести в листбокс только фамилии. С этим проблем нет, через сплит откидываю имена и закидываю фамилии в листбокс. 2. Пользователь выбирает в листбоксе определенные фамилии (с помощью мультиселекта) и выбранные фамилии перекидываются в RTB2. Проблема в том, что к этим фамилиям нужно вернуть обратно имена, которые были откинуты через сплит. Как вернуть имена, которые были откинуты через сплит, не пойму?

  1. Всем приветы! Есть два одномерных строковых массива. В первом и втором массиве одинаковое количество строк. Нужно получить третий массив в котором строки первого и второго массива соединены.Первый массив: 111 222 333Второй массив: aaa bbb cccТретий массив(который нужно получить): 111aaa 222bbb 333ccc Знаю как это сделать через лист строк, но мне кажется это фиговый вариант, да и медленный при объемных массивах. Какие есть варианты? Добавлено через 23 минуты Вот такой вариант сейчас еще пришел в голову:vb.net1 2 3 4 5 6 7 8         Dim arr1() As String = {"111", "222", "333"}         Dim arr2() As String = {"aaa", "bbb", "ccc"}         Dim arr3(arr1.Length - 1) As String             For i = 0 To arr1.Length - 1             arr3(i) = arr1(i) & arr2(i)         NextПока остановился на нем. Но, если есть что-то более оптимальное, то покажите как это сделать, буду благодарен.

  1. Помогите пожалуйста, надо сравнить цвет пикселя с диапазоном ARGB {255,200-255,200-255,200-255} If pixelColor = ARGB {255,200-255,200-255,200-255} Then Делал с циклами, но 3 цикла и каждый по 55 это нереально долго. Возможно ли как то одной проверкой?

  1. Всем здравствуйте. Как выделить из UShort младший и старший байты? Если число записано в коде так: DEFF. Какой здесь байт младший, DE или FF?

  1. Не получается напечатать на второй странице. Не понимаю как работает e.HasMorePages Нужно при достижении n=70 переходить на второй лист.vb.net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 Private Sub DOC2_print(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs) Handles DOC2.PrintPage         ' печать списка растений         Dim font As New System.Drawing.Font("ARIAL", 14, FontStyle.Bold)         Dim font2 As New System.Drawing.Font("ARIAL", 12, FontStyle.Bold)         Dim x, y As Integer         Dim hag As Integer = 15 ' шаг строк         Dim hagProbel As Integer = 10 ' шаг пробел         Try               Dim name1 As String = Nothing             x = 150 : y = 30             e.Graphics.DrawString(print_name, font, Brushes.Black, x, y) ' Выводим на страницу текст             If print_name.Length > 6 Then x = x - ((print_name.Length / 2) * hagProbel)             x = 20 : y = 70             Dim n As Integer             For n = 0 To Список.Length - 1                 If n = 70 Then                     'x = 400 : y = 70                 End If                   name1 = Список(n)                 Dim name2 As String = ""                 If name1.Length > 30 Then                     name2 = name1.Substring(31)                     name1 = name1.Substring(0, 31)                     e.Graphics.DrawString(name1, font2, Brushes.Black, x, y)                     y = y + hag                     e.Graphics.DrawString(name2 & " -  " & shtuk(n) & " шт.", font2, Brushes.Black, x, y, New System.Drawing.StringFormat)                 Else                     e.Graphics.DrawString(name1 & " -  " & shtuk(n) & " шт.", font2, Brushes.Black, x, y, New System.Drawing.StringFormat)                 End If                 y = y + hag             Next             e.HasMorePages = (n < Список.Length)             Catch ex As Exception             Ошибка.Журнал(ex, "DOC2_print", "Pechat")         End Try       End SubДобавлено через 16 часов 24 минуты никто не сталкивался с печатью?