Проблема такова: есть RTFBox, в котором содержится произвольный текст. Требуется: выделить из него слова и знанести их в массив. Т.е., чтобы в массив попали только слова: без пробелов, без знаков препинания; если какое-то слово в скобках или кавычках, то эти кавычки и скобки надо убрать и т.д. Я пробовал сам: получались глюки.
Вот мой код:
'Îáúÿâëåíèå ïåðåìåííûõ
Public num_char As Long 'êîë-âî ñèìâîëîâ â òåêñòå
Public num_word As Long 'êîë-âî ñëîâ â òåêñòå
Public num_letter As Long 'êîë-âî áóêâ â òåêñòå
Private Sub Ñòàòèñòèêà_Click()
Dim abc As String 'õðàíèì òåêñò
abc = RichTextBox1.Text 'çàïèñûâàåì â abc òåêñò
Dim aaa As Long
aaa = Len(abc) 'äëèíà òåêñòà
num_char = aaa 'êîë-âî ñèìâîëîâ â ãëîá. ïåðåìåííóþ
'Ñîçäàåì ìàññèâ ñ êîë-ì ýëåìåíòîâ, ðàâíûì êîë-âó ñèìâîëîâ â ñòðîêå
'Dim slova(100) As String
ReDim slova(aaa) As String 'ðàçìåð ìàññèâà=êîëè÷åñòâó ñèìâîëîâ â òåêñòå
Dim i
Dim bukva As String 'õðàíèì òåêóùèé ñèìâîë
Dim bukva2 As String 'õðàíèì äâà ñèìâîëà: òåêóùèé+ñëåäóþùèé
Dim ii As Long
ii = 0
'ñ÷èòûâàåì âñå ñèìâîëû
For i = 1 To aaa
'çàíîñèì òåêóùèé ñèìâîë â bukva
bukva = Mid(abc, i, 1)
'çàíîñèì äâà ñèìâîëà â bukva2
bukva2 = Mid(abc, i + 1, 1)
'çàíîñèì â ìàññèâ áóêâû ïîäðÿä
slova(ii) = slova(ii) & bukva
'ïðîâåðêà: íîâîå ëè ñëîâî
If bukva = " " Or bukva2 = "; " Or bukva2 = ". " _
Or bukva2 = ", " Or bukva2 = ": " Or bukva2 = "? " _
Or bukva2 = "! " Or bukva2 = ") " Or bukva = ")" Then
'óäàëÿåì ïðîáåë, ò.å. êðàéíèé ñïðàâà ñèìâîë
slova(ii) = Left(slova(ii), Len(slova(ii)) - 1)
'óäàëÿåì ñëåäóþùèé ñèìâîë - çíàê ïðåïèíàíèÿ
If Right(slova(ii), 1) = "." Or Right(slova(ii), 1) = ";" _
Or Right(slova(ii), 1) = ":" Or Right(slova(ii), 1) = "," _
Or Right(slova(ii), 1) = "?" Or Right(slova(ii), 1) = "!" _
Or Right(slova(ii), 1) = ")" _
Then slova(ii) = Left(slova(ii), Len(slova(ii)) - 1)
'ïåðåäâèãàåì èíäåêñ ìàññèâà, ÷òîáû ñëåäóþùèå ñèìâîëû
'çàïèñûâàëèñü óæå â äðóãóþ ÿ÷åéêó ìàññèâà
ii = ii + 1
End If
Next i
ReDim Preserve slova(ii) 'óìåíüøàåì ðàçìåð ìàññèâà äî êîë-âà ñëîâ â òåêñòå
num_word = ii 'êîë-âî ñëîâ â ãëîá. ïåðåìåííóþ
'âû÷èñëÿåì êîë-âî áóêâ, ò.å. çà âû÷åòîì ïðîáåëîâ è çíàêîâ ïðåïèíàíèÿ
num_letter = 0
For i = 0 To num_word
num_letter = num_letter + Len(slova(i))
Next i
Ответить
|