Форум программистов, компьютерный форум, киберфорум
Dragokas
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Парсинг предложения на отдельные слова (VB)

Запись от Dragokas размещена 10.07.2012 в 01:55
Обновил(-а) Dragokas 15.09.2012 в 23:49

Наиболее универсальный для VB алгоритм, имхо:

1) Заменяем все "не-буквы" (кроме знака дефис "-") на пробел.
2) Заменяем сочитание " - " на пробел.
3) Удаляем в строке слева и справа все пробелы.
4) Заменяем все двойные пробелы на одиночные (пока такие встречаются).
5) Выполняем команду разбиения предложения на слова по пробелам Arr=Split(St) в масив (Variant-переменную).

Этот код демонстрирует подсчет количества указанного пользователем слова в заранее заданном предложении.
Алгоритм завершается:
5) обратной заменой всех одиночных пробелов на двойные;
6) вставкой слева и справа строки одиночного пробела
- с целью быстрого подсчета кол-ва слов командой Replace с маской " слово "
Код VB с поддержкой украинского алфавита:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit
 
Sub Words_Count()
Dim L As String * 1, St$, What$, i%
St = InputBox("Введите предложение:", , "Привет! Чмок! Приветики! Чмок! Приветики! Чмок! Поки-Поки! Поки!")
What = InputBox("Введите слово для поиска: ")
For i = 1 To Len(St)
    L = Mid$(St, i, 1)
    If L Like "[!A-Za-zА-яҐЁЄЇіґёєї'‘’-]" Then Mid$(St, i, 1) = " "
Next
St = Replace$(St, " - ", " ")
St = Trim(St)
Do
    i = Len(St)
    St = Replace$(St, "  ", " ")
Loop Until i = Len(St)
St = Replace$(St, " ", "  ")
St = " " + St + " "
MsgBox "В указанном тексте слово """ + What + """ встречается " & _
    (Len(St) - Len(Replace$(LCase$(St), " " + LCase$(What) + " ", ""))) / (Len(What) + 2) & " раз(а)."
End Sub


Танцы с дефисом предназначены как ни странно для случаев, когда слово пишется через дефис и считается как единое целое.
Единственное, что может не сработать: ошибка в исходном предложении, когда дефис ("-") написан слитно с началом или концом слова (я намеренно не усложнял код).

P.S. Практическая польза также может состоять в возможности сравнения данных, в которых предполагается наличие ошибок (например:
  • разный регистр букв;
  • лишние знаки (пробелы, точки и пр.)
Размещено в Без категории
Показов 3919 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru