iTextRange::FindText 方法 (tom.h)
最多搜索 bstr 给出的文本的 Count 字符数。 起始位置和方向也由 Count 指定,匹配条件由 Flags 指定。
语法
HRESULT FindText(
BSTR bstr,
long Count,
long Flags,
long *pLength
);
参数
bstr
类型: BSTR
要查找的字符串。
Count
类型: long
要搜索的最大字符数。 可以是以下项之一。
tomForward | 搜索到文章末尾。 这是默认值。 |
n (大于 0) | 从 cpFirst 开始向前搜索 n 个字符。如果范围本身与 bstr 匹配,则尝试从 cpFirst + 1 进行另一次搜索。 |
n (小于 0) | 从 cpLim 开始向后搜索 n 个字符。如果范围本身与 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 方法从范围的 Start cp 向前或向后搜索, ITextRange::FindTextEnd 方法从范围的 End cp 向前或向后搜索。 有关更多详细信息,请参阅这些方法的说明。
下面是显示 ITextRange::FindText 方法的几个代码片段。
示例 #1。 以下 Microsoft Visual Basic for Applications (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
可以将它们插入另一个编辑实例并保存到文件中,也可以将它们插入到表格或电子表格中的单独单元格中,而不是打印这些注释。
若要打印包含一个或多个“laser”一词匹配项的所有行,请将 循环替换为以下代码:
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
请注意,使用 FindText 字符串参数中的 字符^p
来查找一对连续的段落标记。
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 |
标头 | tom.h |
DLL | Msftedit.dll |
请参阅
概念性
引用