Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Imports Microsoft.Office.Interop.Word
  2.  
  3. Enum ТипАлфавит
  4.     Русский
  5.     Латинский
  6. End Enum
  7.  
  8. Public Class Form1
  9.     Public Sub Form1_Load(sender As Object,
  10.       e As EventArgs) Handles Me.Load
  11.         cmbАлфавит.Text = "Русский"
  12.     End Sub
  13.  
  14.     Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  15.         Dim ТекстовыеДанные As КлассТекстовыеДанные = New КлассТекстовыеДанные(Диапазон:=Globals.ThisDocument.Content,
  16.      Алфавит:=Switch(cmbАлфавит.Text = "Русский", ТипАлфавит.Русский,
  17.     cmbАлфавит.Text = "Латинский", ТипАлфавит.Латинский),
  18.       Сортировать:=Switch(rdbПоВозрастанию.Checked, WdSortOrder.wdSortOrderAscending,
  19.      rdbПоУбыванию.Checked, WdSortOrder.wdSortOrderDescending),
  20.      УдалятьОдинаковые:=chbУдалятьОдинаковые.Checked)
  21.  
  22.         ТекстовыеДанные.Обработать()
  23.         ТекстовыеДанные = Nothing
  24.     End Sub
  25.  
  26.  
  27.     Public Sub Закрыть_Click(sender As Object, e As EventArgs) Handles Закрыть.Click
  28.         Close()
  29.     End Sub
  30. End Class
  31.  
  32. Class КлассТекстовыеДанные
  33.         Public Диапазон As Range
  34.     Public Алфавит As ТипАлфавит
  35.     Public Сортировать As WdSortOrder
  36.     Public УдалятьОдинаковые
  37.     Private Документ As Document
  38.     Private Таблица As Table
  39.     Private МаксКолБуквВСловах As Byte
  40.  
  41.  
  42.  
  43.     Sub New(Диапазон As Range,
  44.             Aлфавит As ТипАлфавит,
  45.             Сортировать As WdSortOrder,
  46.             УдалятьОдинаковые As Boolean)
  47.         Me.Диапазон = Диапазон
  48.         Me.Алфавит = Aлфавит
  49.         Me.Сортировать = Сортировать
  50.         Me.УдалятьОдинаковые = УдалятьОдинаковые
  51.     End Sub
  52.  
  53.  
  54.     Sub Обработать()
  55.             МаксКолБуквВСловах = ОпределитьМаксКолБуквВСловах()
  56.         If МаксКолБуквВСловах = 0 Then
  57.             MessageBox.Show("В тексте отсутсвуют искомые слова")
  58.             Exit Sub
  59.         End If
  60.         Документ = Globals.ThisDocument.Application.Documents.Add
  61.             Таблица = Документ.Tables.Add(Документ.Range, 1, 2)
  62.             ЗаписатьВТaблицуПредложения()
  63.         Таблица.Sort(FieldNumber:="столбацам 1", SortOrder:=Сортировать)
  64.         If УдалятьОдинаковые Then УдалитьИзТаблицыПовторяющиесяПредложения()
  65.     End Sub
  66.  
  67.         Public Function ОпределитьМаксКолБуквВСловах() As Byte
  68.  
  69.             Dim m As Byte, n As Byte
  70.             For Each Слово As Range In Диапазон.Words
  71.             If ПринадлежитАлфавиту(Слово) Then
  72.                 n = Слово.Text.Trim.Length
  73.                 If n > m Then m = n
  74.             End If
  75.         Next Слово
  76.         Return m
  77.         End Function
  78.  
  79.  
  80.     Public Sub ЗаписатьВТaблицуПредложения()
  81.  
  82.         With Таблица
  83.             For Each Предложение As Range In Диапазон.Sentences
  84.                 If СодержитДлинноеСлово(Предложение) Then
  85.                     .Cell(Таблица.Rows.Count, 1).Range.Text = Предложение.Text.Trim
  86.                     .Cell(Таблица.Rows.Count, 2).Range.Text = "1"
  87.                     '(не уверена)
  88.                    .Rows.Add()
  89.                 End If
  90.             Next Предложение
  91.             .Rows.Last.Delete()
  92.         End With
  93.     End Sub
  94.  
  95.     Public Sub УдалитьИзТаблицыПовторяющиесяПредложения()
  96.         Dim i As Integer = 2
  97.         With Таблица
  98.             Do While i <= .Rows.Count
  99.                 If .Cell(i, 1).Range.Text = .Cell(i - 1, i).Range.Text Then
  100.                     .Cell(i - 1, 2).Range.Text = Val(.Cell(i - 1, 2).Range.Text) + 1
  101.                     .Rows(i).Delete()
  102.                 Else
  103.                     i += 1
  104.  
  105.                 End If
  106.             Loop
  107.         End With
  108.     End Sub
  109.  
  110.     Public Function СодержитДлинноеСлово(Предложение As Range) As Boolean
  111.         For Each Слово As Range In Предложение.Words
  112.             If ПринадлежитАлфавиту(Слово) Then _
  113.             If Слово.Text.Trim.Length = МаксКолБуквВСловах Then Return True
  114.         Next Слово
  115.         Return False
  116.     End Function
  117.  
  118.     Public Function ПринадлежитАлфавиту(Слово As Range) As Boolean
  119.         Dim Шаблон As String = Switch(Алфавит = ТипАлфавит.Русский, "[A-я]",
  120. Алфавит = ТипАлфавит.Латинский, "[A-z]")
  121.         For Each Символ As Range In Слово.Characters
  122.             If Not Символ.Text Like Шаблон Then Return False
  123.         Next Символ
  124.         Return True
  125.     End Function
  126.  
  127. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement