Поделиться через


Метод 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

См. также раздел

Основные понятия

FindTextEnd

FindTextStart

ITextRange

Справочные материалы

Текстовая объектная модель