Método ITextRange::FindText (tom.h)
Busca hasta Recuento de caracteres para el texto proporcionado por bstr. La posición inicial y la dirección también se especifican en Count y los criterios de coincidencia se proporcionan mediante Flags.
Sintaxis
HRESULT FindText(
BSTR bstr,
long Count,
long Flags,
long *pLength
);
Parámetros
bstr
Tipo: BSTR
Cadena que se va a buscar.
Count
Tipo: long
Número máximo de caracteres que se van a buscar. Puede ser uno de los siguientes.
tomForward | Busca al final de la historia. Este es el valor predeterminado. |
n (mayor que 0) | Busca n caracteres, empezando por cpFirst. Si el propio intervalo coincide con bstr, se intenta realizar otra búsqueda desde cpFirst + 1. |
n(menor que 0) | Busca n caracteres hacia atrás, empezando por cpLim. Si el propio rango coincide con bstr, se intenta realizar otra búsqueda desde cpLim– 1. |
0 (intervalo degenerado) | La búsqueda comienza después del intervalo. |
0 (intervalo no degenerado) | La búsqueda está limitada al intervalo. |
En todos los casos, si se encuentra una cadena, los límites de intervalo se cambian para que sean los de la cadena coincidente y pLength se establece igual a la longitud de la cadena. Si no se encuentra la cadena, el intervalo permanece sin cambios y pLength se establece igual a cero.
Flags
Tipo: long
Marcas que rigen las comparaciones. Puede ser 0 (valor predeterminado) o cualquier combinación de los valores siguientes.
tomMatchWord | 2 | Coincide con palabras completas. |
tomMatchCase | 4 | Coincide con mayúsculas y minúsculas. |
tomMatchPattern | 8 | Coincide con expresiones regulares. |
pLength
Tipo: long*
Longitud de la cadena coincidente.
Valor devuelto
Tipo: HRESULT
El método devuelve un valor HRESULT . Si el método se realiza correctamente, devuelve S_OK. Si se produce un error en el método, devuelve S_FALSE. Para obtener más información sobre los códigos de error COM, vea Control de errores en COM.
Comentarios
El método ITextRange::FindText también puede coincidir con caracteres especiales mediante un símbolo de intercalación (^) seguido de una letra especial. Para obtener una lista de caracteres especiales, vea la lista especial disponible en el cuadro de diálogo Buscar y reemplazar de Microsoft Word. Por ejemplo, ^p
coincide con la marca de párrafo siguiente. Tenga en cuenta que ^c
se puede usar para representar el contenido del Portapapeles en la cadena que se va a reemplazar. Por lo tanto, el uso ^c
de en la cadena de búsqueda permite buscar texto enriquecido. Para obtener más información, consulte los archivos de ayuda de Word.
Como comparación con el método ITextRange::FindText , el método ITextRange::FindTextStart busca hacia delante o hacia atrás desde la cp Start del intervalo y el método ITextRange::FindTextEnd busca hacia delante o hacia atrás desde la cp End del intervalo. Para obtener más información, consulte las descripciones de estos métodos.
A continuación se muestran varios fragmentos de código que muestran los métodos ITextRange::FindText .
Ejemplo 1. El siguiente programa de Microsoft Visual Basic para Aplicaciones (VBA) imprime todos los comentarios /* ... */ de un artículo identificado por el intervalo 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
En lugar de imprimir estos comentarios, podrían insertarse en otra instancia de edición y guardarse en un archivo, o se podrían insertar en celdas independientes de una tabla u hoja de cálculo.
Para imprimir todas las líneas que contienen una o varias apariciones de la palabra "láser", reemplace el bucle por el código siguiente:
While r.FindText("laser") // Select next occurrence of "laser"
r.Expand tomLine // Select enclosing line
Print r // Print the line
Wend
Ejemplo 2. El siguiente programa imprime una lista de teléfonos, dada una historia que contiene una lista de direcciones. Las entradas de la lista de direcciones están separadas por dos o más marcas de párrafo y cada entrada tiene el siguiente formato.
Person/Business Name
Address (one or more lines)
(area code) telephone number
Observe el uso del carácter ^p
en el argumento de cadena FindText para buscar un par de marcas de párrafo consecutivas.
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
Ejemplo 3. La subrutina siguiente reemplaza todas las apariciones de la cadena, str1, en un intervalo por 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
Ejemplo 4. La siguiente línea de código inserta un espacio en blanco antes de la primera aparición de un paréntesis derecho, "(", que sigue a una aparición de HRESULT.
If r.FindText("HRESULT") And r.FindText("(") Then r = " ("
Para ello, cambie el bucle If en un bucle While/Wend en la línea de código anterior. Este es un ejemplo de una macro FIND/REPLACE que no se puede ejecutar con cuadros de diálogo Buscar y reemplazar .
Requisitos
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | tom.h |
Archivo DLL | Msftedit.dll |
Consulte también
Conceptual
Referencia