Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/32: Рейтинг темы: голосов - 32, средняя оценка - 4.75
25 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11

Нахождение слов,содержащих 2 или более одинаковых букв

02.11.2011, 17:09. Показов 6513. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,форумчане. Хотел бы вас попросить помочь с решением непростой(для меня) задачки. Суть ее такова:"Назовем слово 'мычащим', если оно содержит 2 или более буквы 'м' в его написании. Находясь в Excel, вычислить сколько 'мычащих' слов содержится в документе "Толковый словарь.doc".
Результат вывести в лист Excel." Заранее благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2011, 17:09
Ответы с готовыми решениями:

Поиск слов, содержащих более 8 букв (WORD)
Необходим макрос для WORD, который в тексте находит слова больше 8 букв и выделяет их (например желтым). Очень нужен! Заранее спасибо!

Определение количество слов содержащих три одинаковых букв
Дан текст. Определить количество слов, которые содержат три буквы е. с++ Помогите пожалуйста.

Обработка строк: Заменить большие буквы маленькими в словах, содержащих две и более подряд идущих одинаковых букв
Помогите пожалуйста решить( Обработка строк: Заменить большие буквы маленькими в словах, содержащих две и более подряд идущих...

11
исследователь
325 / 104 / 3
Регистрация: 18.03.2010
Сообщений: 1,079
Записей в блоге: 2
02.11.2011, 18:11
Цитата Сообщение от Shadowdk Посмотреть сообщение
Здравствуйте,форумчане. Хотел бы вас попросить помочь с решением непростой(для меня) задачки. Суть ее такова:"Назовем слово 'мычащим', если оно содержит 2 или более буквы 'м' в его написании. Находясь в Excel, вычислить сколько 'мычащих' слов содержится в документе "Толковый словарь.doc".
Результат вывести в лист Excel." Заранее благодарен.
Из Excelа обращаться к текстовому документу который будет загружен в Word?
А напрямую из Wordа нельзя?
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
03.11.2011, 01:13
А вот как из Ворда.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Option Explicit
Public i As Long
 
Sub moo_count()
i = 0
Dim km As Byte
Selection.HomeKey wdStory           ' поиск с начала документа
With Selection.Find
    .Text = "<*>"                   ' шаблон выделения любого слова
    .MatchWildcards = True          ' подстановочные знаки
    .Wrap = wdFindStop
    
        Do While .Execute           ' поиск срабатывает - очередное слово выделено
        .Text = "[MmМм]"
        km = 0
            Do
            If .Execute Then km = km + 1            ' считаем в выделенном слове букву м
            If km > 1 Then i = i + 1: Exit Do       ' считаем слово, где больше чем 1 м
            Selection.MoveRight                     ' перемещение к следующему символу
            Loop Until Not Selection Like "[A-zА-я]" 'курсор не на слове - идём дальше
        Selection.MoveRight wdWord  ' перемещение вправо к следующему слову
        .Text = "<*>"               ' шаблон выделения любого слова
        Loop
End With
MsgBox "Количество „мычащих слов”: " & i & "."
End Sub
Изображения
 
1
03.11.2011, 01:17

Не по теме:

Sasha_Smirnov, У вас там написано "Количество 'м-мычащих слов'" и смайлик. А число слов-то где? =3

0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
03.11.2011, 03:44
Смайлика нет. Есть двоеточие. Можно тире — но похоже на минус! Что плохо.

Предыдущий код — чушь; нижележащий же «кушает» в том числе и "мини-ЭВМ", и собственно му-му!

Можно раза в 2 короче (вообще не делая цикла по словам), но как-то ненадёжно, мне кажется.
Добавлено через 1 час 58 минут
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Option Explicit
Public i As Long
 
Sub moo_count()
i = 0                               ' искомое количество (Public: общедоступно)
Dim km As Integer
Selection.HomeKey wdStory           ' поиск с начала документа
With Selection.Find
    .Text = "<*>"                   ' любое слово
    .MatchWildcards = True          ' подстановочные знаки
        Do While .Execute           ' поиск срабатывает - очередное слово выделено
        .Text = "?"                 ' любой символ (подстановочный знак при поиске)
        km = 0
            Do
            .Execute
            If Selection.Text Like "[MmМм]" Then km = km + 1 ' считаем в слове эм
            If km > 1 Then i = i + 1: Exit Do ' считаем слово, где больше чем 1 м
            Loop Until Not Selection Like "[-A-zА-я]" 'выход, когда курсор за словом
        Selection.MoveRight wdWord  ' перемещение вправо к следующему слову
        .Text = "<*>"               ' снова любое слово
        Loop
    .Text = ""                      ' очистка диалогового окна поиска
    .MatchWildcards = False         ' снятие флажка "подстановочные знаки"
End With
MsgBox "Количество „мычащих слов” равно " & i & "."
End Sub
Миниатюры
Нахождение слов,содержащих 2 или более одинаковых букв  
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
03.11.2011, 09:54
Лучший ответ Сообщение было отмечено как решение

Решение

Вот так - неважно, из Word или из Excel:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub bb()
Dim w, i&
With GetObject("c:\temp\Толковый словарь.doc")
    For Each w In .words
        If Len(w) - Len(Replace(w, "м", "", , , vbTextCompare)) > 1 Then i = i + 1
    Next
    If .Application.documents.Count = 1 Then .Application.Quit Else .Close 0
End With
MsgBox "Мычащих слов: " & i
End Sub
3
 Аватар для Novichek =)
537 / 28 / 4
Регистрация: 25.04.2011
Сообщений: 238
03.11.2011, 11:17
Цитата Сообщение от Казанский Посмотреть сообщение
Вот так - неважно, из Word или из Excel:
Прикольно! Казанский а можно закомментировать?
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
03.11.2011, 12:48
Можно.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub bb()
Dim w, i&
With GetObject("c:\temp\Толковый словарь.doc")  'получить объект Word.Document
                'если приложение Word запущено, документ откроется в нем, но будет невидимым.
                'если не запущено, то будет запущено и будет невидимым
    For Each w In .words    'w - объект типа (word)Range, у которого свойством по умолчанию
                'является Text (String), поэтому с ним можно обращаться как со строкой
        If Len(w) - Len(Replace(w, "м", "", , , vbTextCompare)) > 1 Then i = i + 1
                'Разность длины исходной строки и строки, в которой удалены буквы "м"
                'в обоих регистрах
    Next
    If .Application.documents.Count = 1 Then .Application.Quit Else .Close 0
                'если в приложении Word открыт один документ (этот), то закрыть приложение,
                'иначе закрыть только этот документ без сохранения.
End With
MsgBox "Мычащих слов: " & i
End Sub
2
25 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
03.11.2011, 16:51  [ТС]
Большое спасибо всем за помощь,очень выручили Из двух предложенных кодов выбрал код, написанный Казанским, т.к. больше удовлетворяет условию да и более понятный для меня Только хотел бы еще узнать, как доработать код Казанского так, чтобы он как и у Sashi_Smirnova считал слова с дефисом между ними,например, тот же самый му-му или мини-ЭВМ?
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
03.11.2011, 16:58
Цитата Сообщение от Казанский Посмотреть сообщение
'в обоих регистрах
это потому, что
Цитата Сообщение от Казанский Посмотреть сообщение
vbTextCompare
так, да??
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
03.11.2011, 17:06
Лучший ответ Сообщение было отмечено как решение

Решение

Теперь цикл по абзацам, текст разбивается на слова функцией Split, по пробелам:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub bb1()
Dim w, i&, p
With GetObject("c:\temp\Толковый словарь.doc")
    For Each p In .paragraphs
        For Each w In Split(p)
            If Len(w) - Len(Replace(w, "м", "", , , vbTextCompare)) > 1 Then i = i + 1
        Next
    Next
    If .Application.documents.Count = 1 Then .Application.Quit Else .Close 0
End With
MsgBox "Мычащих слов: " & i
End Sub
Добавлено через 5 минут
2 Эндрю: да. Вместо этого в заголовок модуля можно поставить Option Compare Text, но лучше для каждого поиска или замены конкретно указывать, различаем регистр или нет.
4
25 / 0 / 0
Регистрация: 27.02.2011
Сообщений: 11
03.11.2011, 17:26  [ТС]
Теперь все отлично работает,еще раз спс=)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2011, 17:26
Помогаю со студенческими работами здесь

Работа с текстовыми файлами: подсчитать количество слов, содержащих пары соседних одинаковых букв
Заданная строка, состоящая из слов, разделенным одним или несколькими пробелами. Подсчитать количество слов содержащих пары соседних...

Получить новую последовательность, путем исключения слов содержащих не более двух различных букв
Дана последовательность слов длиной N. Слова состоят из строчных латинских букв и разделены одним или несколькими пробелами. Получить новую...

Помощь в работе со строками (Дана строка. Заменить в ней каждую из групп, содержащих 3 или более одинаковых символов многоточием)
Доброго времени суток. По заданию необходимо:Дана строка. Заменить в ней каждую из групп, содержащих 3 или более одинаковых символов...

Определить все пары слов, в начале/конце которых находится более 3-х гласных или согласных букв подряд
В заданной строке английского текста определите все пары слов, которые читаются неудобно. Такими будем считать слова, в начале или в конце...

Подсчитать количество столбцов двухмерного массива, содержащих более двух одинаковых элементов
Составьте программу подсчета столбцов двухмерного массива, содержащих более двух одинаковых элементов. Добавлено через 17 часов 18...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 25.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 25.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 23.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru