Ф-я для считывания предложения.
- Код: Выделить всё
Public Function ReadSentence(ByRef RefStr As String) As String
' Ф-я возвращает предложение считанное из переданной строки RefStr
' и укорачивает RefStr на одно предложение.
Dim str As String = LTrim(RefStr)
Dim sSentence, sLeft, L3 As String
Dim cOpenBrackets As Int32 = 0
Do Until (str = "")
sLeft = Left(str, 1)
L3 = Right(Left(str, 3), 1)
' Проверка на открывающие скобки.
If (sLeft = "(" Or sLeft = "[" Or sLeft = "{") Then
' Сщитать символ.
sSentence &= sLeft
str = Right(str, Len(str) - 1)
' увеличить счётчик скобок.
cOpenBrackets += 1
' Проверка на закрывающие скобки.
ElseIf (sLeft = ")" Or sLeft = "]" Or sLeft = "}") Then
' Сщитать символ.
sSentence &= sLeft
str = Right(str, Len(str) - 1)
' уменьшить счётчик скобок
If (cOpenBrackets > 0) Then cOpenBrackets -= 1
' Проверка на сокращение. (работает только если 3-й символ - строчная буква)
ElseIf Left(str, 2) = ". " And Len(str) >= 3 _
And L3 = LCase(L3) And Not (L3 = UCase(L3)) Then
' Сщитать символ.
sSentence &= sLeft
str = Right(str, Len(str) - 1)
' Конец предложения?
' (Если открыты скобки, то игнорируем другие знаки,
' если после знака ничего нет, то это последнее предложение,
' если после знака НЕТ пробела (там любой другой символ), то это не конец
' предложения (предложения разделяются между собой пробелами).)
ElseIf (cOpenBrackets = 0) _
And (Len(str) > 3 And (Left(str, 4) = "... ") _
Or Len(str) = 3 And (Left(str, 3) = "...") _
Or Len(str) > 1 And (Left(str, 2) = ". " Or Left(str, 2) = "! " Or Left(str, 2) = "? ") _
Or Len(str) = 1 And (sLeft = "." Or sLeft = "!" Or sLeft = "?")) Then
' Сщитать символ.
If Left(str, 3) = "..." Then
' Сщитать 3 символа.
sSentence &= Left(str, 3)
str = Right(str, Len(str) - 3)
Else
' Сщитать 1 символ.
sSentence &= sLeft
str = Right(str, Len(str) - 1)
End If
Exit Do
' Обычный символ.
Else
sSentence &= sLeft
str = Right(str, Len(str) - 1)
End If
Loop
' Check brackets
If Not (cOpenBrackets = 0) Then
MsgBox("Warning in ReadSentense." & vbCrLf & "Количество незакрытых открывающих скобок: " & cOpenBrackets, MsgBoxStyle.Exclamation)
End If
' Return rezult.
RefStr = str
Return sSentence
End Function
До первого вызова ф-и считываем текст в перем. s, затем [syntax="vb"]s = Replace(s, vbCrLf, " ")[/syntax].
Затем прогоном по циклу считываем предложения в масиив
- Код: Выделить всё
Do Until (s = "")
CurSentenses += 1
Sentenses(CurSentenses) = ReadSentence(s)
Loop