Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2010, 17:08   #1
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
Вопрос Произвольная выборка слов

Почему код:

a = ActiveDocument.Words.Count
For i=1 to a
CurWord = ActiveDocument.Words(i).Text
...
Next i

значительно (раз в 10) медленнее, чем:

a = ActiveDocument.Paragraphs.Count
Set myRange = ActiveDocument.Range(Start:=0, End:=ActiveDocument.Paragraphs(a).R ange.End)
For Each aWord In myRange.Words
CurWord = aWord.Text
....
Next aWord

Как можно ускорить? При условии, что мне нужна произвольная выборка слов, а не последовательная
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 25.03.2010, 12:20   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Уточняю задачу.
Обработка текста по словам. Но так как Word воспринимает слово "всё-таки" как 3 (три) слова, то необходимо после произвеси изменение в словах, проанализировав всю последовательность.
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 25.03.2010, 13:22   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Можно попробовать перебирать предложения, а текст предложения разбивать на слова функцией Split. В получившемся массиве слов удалять знаки препинания. Но при этом потеряется информация о положении слова в документе, хотя её можно будет восстановить по номеру слова в массиве. Как-то так.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 25.03.2010, 16:07   #4
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Можно попробовать перебирать предложения, а текст предложения разбивать на слова функцией Split. В получившемся массиве слов удалять знаки препинания. Но при этом потеряется информация о положении слова в документе, хотя её можно будет восстановить по номеру слова в массиве. Как-то так.
Спасибо за вариант! Я этот вариант уже прорабатываю. Просто ещё хотелось узнать почему так медленно.
Хотя, у меня уже возникли соображения по этому поводу: при индексированном доступе Word заново просматривает весь документ, пересчитывая слова, при каждом обращении за словом. А при последовательном доступе он этого не делает
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 25.03.2010, 22:57   #5
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Самый быстрый способ:
Код:
Dim R As Range
        Set R = ActiveDocument.Words.First
        Do
            Set R = R.Next(Unit:=wdWord, Count:=1)
        Loop While Not (R Is Nothing)
Как ни странно, а способ Next/Pred на 25-30% быстрее чем For Each. Параметр Count позволяет проводить выборку произвольно.

Свойство Count лучше вообще не использовать, даже само по себе оно очень тормозит. Попробуйте на большом документе получить ActiveDocument.Characters.Count.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 26.03.2010, 07:53   #6
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Спасибо. Попробую
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Спасайте! Идет произвольная перезагрузка... vilison Безопасность, Шифрование 30 02.02.2010 21:11
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
по вводу слов в массив и подсчёт введённых слов -ushёl- Общие вопросы C/C++ 4 16.11.2009 00:45
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19
дается строка Edit1(произвольная) Вывести в поле Edit2 строку наоборот RocKy Общие вопросы Delphi 16 23.07.2007 02:23