Метод ITextRange::FindText (tom.h)
Выполняет поиск текста, заданного параметром bstr, до числа символов. Начальная позиция и направление также задаются параметром Count, а критерии соответствия задаются флагами.
Синтаксис
HRESULT FindText(
BSTR bstr,
long Count,
long Flags,
long *pLength
);
Параметры
bstr
Тип: BSTR
Строка для поиска.
Count
Тип: long
Максимальное количество символов для поиска. Это может быть один из следующих вариантов.
tomForward | Поиски до конца истории. Это значение по умолчанию. |
n (больше 0) | Выполняет поиск вперед для n символов, начиная с cpFirst. Если сам диапазон соответствует bstr, выполняется попытка выполнить другой поиск из cpFirst + 1. |
n(меньше 0) | Выполняет поиск n символов назад, начиная с cpLim. Если сам диапазон соответствует bstr, предпринимается попытка выполнить другой поиск из cpLim–1. |
0 (вырожденный диапазон) | Поиск начинается после диапазона. |
0 (неразрожденный диапазон) | Поиск ограничен диапазоном. |
Во всех случаях при обнаружении строки ограничения диапазона изменяются на ограничения совпадающих строк, а pLength устанавливается равным длине строки. Если строка не найдена, диапазон остается неизменным, а значение pLength равно нулю.
Flags
Тип: long
Флаги, управляющие сравнениями. Это может быть 0 (значение по умолчанию) или любое сочетание следующих значений.
tomMatchWord | 2 | Соответствует целым словам. |
tomMatchCase | 4 | Соответствует регистру. |
tomMatchPattern | 8 | Соответствует регулярным выражениям. |
pLength
Тип: long*
Длина совпадаемой строки.
Возвращаемое значение
Тип: HRESULT
Метод возвращает значение HRESULT . Если метод завершается успешно, он возвращает S_OK. Если метод завершается сбоем, он возвращает S_FALSE. Дополнительные сведения о кодах ошибок COM см. в разделе Обработка ошибок в COM.
Комментарии
Метод ITextRange::FindText также может сопоставлять специальные символы с помощью курсора (^), за которым следует специальная буква. Список специальных символов см. в разделе Специальный список, доступный в диалоговом окне Поиск и замена Microsoft Word. Например, ^p
соответствует следующему знаку абзаца. Обратите внимание, ^c
что можно использовать для представления содержимого буфера обмена в строке для замены. Таким образом, использование ^c
в строке поиска позволяет выполнять поиск форматированного текста. Дополнительные сведения см. в Word файлах справки.
В сравнении с методом ITextRange::FindText метод ITextRange::FindTextStart выполняет поиск вперед или назад из начальной точки диапазона, а метод ITextRange::FindTextEnd выполняет поиск вперед или назад из конечной точки диапазона. Дополнительные сведения см. в описании этих методов.
Ниже приведено несколько фрагментов кода, в которых показаны методы ITextRange::FindText .
Пример 1. Следующая программа Microsoft Visual Basic для приложений (VBA) выводит все комментарии /* ... */ в истории, определяемой диапазоном r.
Sub PrintComments (r As ITextRange)
r.SetRange 0, 0 'r = insertion pt at start of story
Do While r.FindText("/*") And r.FindTextEnd("*/") 'Select comment
r.MoveStart tomCharacter, 2 'But do not include the opening or
'closing comment brackets
r.MoveEnd tomCharacter, -2
Print r 'Show the folks
Loop
End Sub
Вместо печати этих комментариев их можно вставить в другой экземпляр редактирования и сохранить в файл или в отдельные ячейки в таблице или электронной таблице.
Чтобы напечатать все строки, содержащие одно или несколько вхождений слова "лазер", замените цикл следующим кодом:
While r.FindText("laser") // Select next occurrence of "laser"
r.Expand tomLine // Select enclosing line
Print r // Print the line
Wend
Пример 2. Следующая программа печатает список телефонов, учитывая историю, содержащую список адресов. Записи списка адресов разделяются двумя или более знаками абзаца, и каждая запись имеет следующую форму.
Person/Business Name
Address (one or more lines)
(area code) telephone number
Обратите внимание на использование символа ^p
в строковом аргументе FindText для поиска пары последовательных знаков абзаца.
Sub PrintTelephoneList (r As ITextRange)
r.SetRange 0, 0 // r = insertion point at start of story
r.MoveWhile C1_WHITE // Bypass any initial white space
Do
r.EndOf tomParagraph, 1 // Select next para (line): has name
Print r // Print it
Do
r.MoveWhile C1_SPACE // Bypass possible space chars
If r.Char = Asc("(") Then Exit Do // Look for start of telephone #
Loop While r.Move(tomParagraph) // Go to next paragraph
r.EndOf tomParagraph, 1 // Select line with telephone number
Print r // Print it
Loop While r.FindText("^p^p") // Find two consecutive para marks
End Sub
Пример 3. Следующая подпрограмма заменяет все вхождения строки str1 в диапазоне на str2:
Sub Replace ( tr As ITextRange, str1 As String, str2 As String )
Dim r As ITextRange
r = tr.Duplicate // Copy tr parameters to r
r.End = r.Start // Convert to insertion point at Start
While r.FindText(str1, tr.End - r.End) // Match next occurrence of str
r = str2 // Replace it with rep
Wend // Iterate till no more matches
End Sub
Пример 4. В следующей строке кода перед первым вхождением правой круглых скобок () вставляется пустое поле, следующее за вхождением HRESULT.
If r.FindText("HRESULT") And r.FindText("(") Then r = " ("
Чтобы сделать это для всех таких вхождений, измените цикл If на While/Wend в приведенной выше строке кода. Это пример макроса FIND/REPLACE , который не может быть запущен с помощью диалоговых окон "Найти и заменить ".
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | tom.h |
DLL | Msftedit.dll |
См. также раздел
Основные понятия
Справочные материалы