Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports Microsoft.Office.Interop.Word
- Enum ТипАлфавит
- Русский
- Латинский
- End Enum
- Public Class Form1
- Public Sub Form1_Load(sender As Object,
- e As EventArgs) Handles Me.Load
- cmbАлфавит.Text = "Русский"
- End Sub
- Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim ТекстовыеДанные As КлассТекстовыеДанные = New КлассТекстовыеДанные(Диапазон:=Globals.ThisDocument.Content,
- Алфавит:=Switch(cmbАлфавит.Text = "Русский", ТипАлфавит.Русский,
- cmbАлфавит.Text = "Латинский", ТипАлфавит.Латинский),
- Сортировать:=Switch(rdbПоВозрастанию.Checked, WdSortOrder.wdSortOrderAscending,
- rdbПоУбыванию.Checked, WdSortOrder.wdSortOrderDescending),
- УдалятьОдинаковые:=chbУдалятьОдинаковые.Checked)
- ТекстовыеДанные.Обработать()
- ТекстовыеДанные = Nothing
- End Sub
- Public Sub Закрыть_Click(sender As Object, e As EventArgs) Handles Закрыть.Click
- Close()
- End Sub
- End Class
- Class КлассТекстовыеДанные
- Public Диапазон As Range
- Public Алфавит As ТипАлфавит
- Public Сортировать As WdSortOrder
- Public УдалятьОдинаковые
- Private Документ As Document
- Private Таблица As Table
- Private МаксКолБуквВСловах As Byte
- Sub New(Диапазон As Range,
- Aлфавит As ТипАлфавит,
- Сортировать As WdSortOrder,
- УдалятьОдинаковые As Boolean)
- Me.Диапазон = Диапазон
- Me.Алфавит = Aлфавит
- Me.Сортировать = Сортировать
- Me.УдалятьОдинаковые = УдалятьОдинаковые
- End Sub
- Sub Обработать()
- МаксКолБуквВСловах = ОпределитьМаксКолБуквВСловах()
- If МаксКолБуквВСловах = 0 Then
- MessageBox.Show("В тексте отсутсвуют искомые слова")
- Exit Sub
- End If
- Документ = Globals.ThisDocument.Application.Documents.Add
- Таблица = Документ.Tables.Add(Документ.Range, 1, 2)
- ЗаписатьВТaблицуПредложения()
- Таблица.Sort(FieldNumber:="столбацам 1", SortOrder:=Сортировать)
- If УдалятьОдинаковые Then УдалитьИзТаблицыПовторяющиесяПредложения()
- End Sub
- Public Function ОпределитьМаксКолБуквВСловах() As Byte
- Dim m As Byte, n As Byte
- For Each Слово As Range In Диапазон.Words
- If ПринадлежитАлфавиту(Слово) Then
- n = Слово.Text.Trim.Length
- If n > m Then m = n
- End If
- Next Слово
- Return m
- End Function
- Public Sub ЗаписатьВТaблицуПредложения()
- With Таблица
- For Each Предложение As Range In Диапазон.Sentences
- If СодержитДлинноеСлово(Предложение) Then
- .Cell(Таблица.Rows.Count, 1).Range.Text = Предложение.Text.Trim
- .Cell(Таблица.Rows.Count, 2).Range.Text = "1"
- '(не уверена)
- .Rows.Add()
- End If
- Next Предложение
- .Rows.Last.Delete()
- End With
- End Sub
- Public Sub УдалитьИзТаблицыПовторяющиесяПредложения()
- Dim i As Integer = 2
- With Таблица
- Do While i <= .Rows.Count
- If .Cell(i, 1).Range.Text = .Cell(i - 1, i).Range.Text Then
- .Cell(i - 1, 2).Range.Text = Val(.Cell(i - 1, 2).Range.Text) + 1
- .Rows(i).Delete()
- Else
- i += 1
- End If
- Loop
- End With
- End Sub
- Public Function СодержитДлинноеСлово(Предложение As Range) As Boolean
- For Each Слово As Range In Предложение.Words
- If ПринадлежитАлфавиту(Слово) Then _
- If Слово.Text.Trim.Length = МаксКолБуквВСловах Then Return True
- Next Слово
- Return False
- End Function
- Public Function ПринадлежитАлфавиту(Слово As Range) As Boolean
- Dim Шаблон As String = Switch(Алфавит = ТипАлфавит.Русский, "[A-я]",
- Алфавит = ТипАлфавит.Латинский, "[A-z]")
- For Each Символ As Range In Слово.Characters
- If Not Символ.Text Like Шаблон Then Return False
- Next Символ
- Return True
- End Function
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement