# Pacoideas - Marcar texto buscado

**URL:** <https://foros.velneo.com/t/pacoideas-marcar-texto-buscado/10948>\
**Category:** Compartir código fuente y ejemplos\
**Created:** [19 Enero, 2022 00:13 UTC](https://foros.velneo.com/t/pacoideas-marcar-texto-buscado/10948 "2022-01-19T00:13:12Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [19 Enero, 2022 00:13 UTC](https://foros.velneo.com/t/pacoideas-marcar-texto-buscado/10948/1 "2022-01-19T00:13:12Z")

</div>

Hola.

![imagen](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/e/efaf6b4bbdc988d32d30eccca56279e92a72a800.png)

A veces realizamos búsquedas por Índice de **trozos** y **palabras** sobre **campos de tipo Texto** que tienen una longitud grande. Localizar visualmente dónde está el texto encontrado es muchas veces complicado.

> Como en muchas aplicaciones que usamos diariamente se me ocurre la **Idea** de **marcar el texto** encontrado para facilitar la vida al usuario.

Usaremos un campo de tipo **Texto enriquecido** para mostrar el texto e insertaremos unas **marcas HTML** para destacar visualmente los **trozos** y **palabras** encontrados.

 ![imagen](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/d/d327f506747010395c1db3ae57d9bdfaa97bb932.png)

Esta es la función que obra el milagro:

FUN\_TXT\_MARCAR\_TEXTO(CTEXTO,CTROZOS,CAÑADIR\_PRE,CAÑADIR\_POS)

```auto
Rem ( Marca Trozos de Texto con una cadena PRE y otra POS )
Rem ( CTEXTO: Texto original a procesar )
Rem ( CTROZOS: Cadena de texto con los Trozos a buscar )
Rem ( CAÑADIR_PRE: Texto que se añade ANTES de cada Trozo )
Rem ( CAÑADIR_POS: Texto que se añade DESPUÉS de cada Trozo )
Rem ( Ejem para poner en negrita: FUN_TXT_MARCAR_TEXTO(#CAMPO_TEXTO, "Madrid IVA", "<b>","</b>") )
Rem ( Obtenemos el Nº de Trozos de texto a buscar )
Set ( NNUM_TROZOS, countString(_CTROZOS + " ", " ") )
Set ( CTEXTO_SIN, removeAccents(toLower(_CTEXTO)) )
For ( NTROZO, 0, NTROZO < NNUM_TROZOS, 1 )
	Set ( LSALIR, 0 )
	Set ( CTROZO_NUM, stringSection(_CTROZOS, " ", NTROZO, 0, 0) )
	Rem ( Solo comprobamos los trozos de más de 2 caracteres )
	If ( len(CTROZO_NUM) > 2 )
		Set ( CTROZO_NUM, removeAccents(toLower(CTROZO_NUM)) )
		Set ( NINDEX, -1 )
		Set ( NLONG_TROZO, len(CTROZO_NUM) )
		Libre
		Rem ( Recorremos las ocurrencias )
		Rem ( Tenemos que buscar todos los Trozos porque puede haber algunos con acentos o mayúsculas )
		For ( NOCURRENCIAS, 0, LSALIR = 0, 1 )
			Set ( NINDEX, indexOfString(CTEXTO_SIN, CTROZO_NUM, (NINDEX + 1), 0) )
			If ( NINDEX > -1 )
				Set ( CCADENA_ANTES, mid(_CTEXTO, NINDEX, NLONG_TROZO) )
				Set ( CCADENA_MARCADA, _CAÑADIR_PRE + CCADENA_ANTES + _CAÑADIR_POS )
				Set ( _CTEXTO, replaceString(_CTEXTO, CCADENA_ANTES, CCADENA_MARCADA) )
				Rem ( Desplazamos el INDEX saltando lo insertado para seguir buscando en el texto )
				Set ( NINDEX, NINDEX + len(_CAÑADIR_PRE + CCADENA_ANTES + _CAÑADIR_POS) )
				Set ( CTEXTO_SIN, removeAccents(toLower(_CTEXTO)) )
				Rem ( Limitamos la búsqueda para evitar retardos )
				If ( (NOCURRENCIAS > 10) | (NINDEX > 1000) )
					Set ( LSALIR, 1 )
			Else
				Set ( LSALIR, 1 )
Set dato de retorno ( _CTEXTO )
Libre

```

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![overall](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/overall/32/5437_2.png) [@overall](https://foros.velneo.com/u/overall)\
**Post date:** [19 Enero, 2022 06:50 UTC](https://foros.velneo.com/t/pacoideas-marcar-texto-buscado/10948/2 "2022-01-19T06:50:21Z")

</div>

Como siempre, muy buena aportación Paco

---

<div class="post-metadata">

**Author:** ![informatica3](https://avatars.discourse-cdn.com/v4/letter/i/9e8a1a/32.png) [@informatica3](https://foros.velneo.com/u/informatica3)\
**Post date:** [19 Enero, 2022 11:00 UTC](https://foros.velneo.com/t/pacoideas-marcar-texto-buscado/10948/3 "2022-01-19T11:00:28Z")

</div>

Paco un 10, mira que hace tiempo se me paso por la cabeza la idea de como hacerlo pero como no era una cosa crucial y no tenia ni idea de como empezar la deje por ahi, pero ahora ya la tienes resuelta. Gracias de nuevo.

---

<div class="post-metadata">

**Author:** ![carlosan](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/carlosan/32/5706_2.png) [@carlosan](https://foros.velneo.com/u/carlosan)\
**Post date:** [22 Enero, 2022 12:33 UTC](https://foros.velneo.com/t/pacoideas-marcar-texto-buscado/10948/4 "2022-01-22T12:33:45Z")

</div>

Gracias Paco por acordarte de los demás y regalarnos esta función tan práctica.

---

<div class="post-metadata">

**Author:** ![estisoft](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/estisoft/32/5714_2.png) [@estisoft](https://foros.velneo.com/u/estisoft)\
**Post date:** [2 Febrero, 2022 19:24 UTC](https://foros.velneo.com/t/pacoideas-marcar-texto-buscado/10948/5 "2022-02-02T19:24:45Z")

</div>

Gracias por el aporte. funciona perfecto.

Solo hice algunas pequeñas modificaciones para poder especificar el color del background y color del texto en la misma función.

Comparto lo que modifique por si a alguien le sirve.

FUN\_TXT\_MARCAR\_TEXTO(CAMPO\_TEXTO, TEXTO\_TROZO, COLOR\_TEXTO,COLOR\_BACKGROUND) )  
Rem ( Ejem para poner en negrita: FUN\_TXT\_MARCAR\_TEXTO(#CAMPO\_TEXTO, “Madrid IVA”, “red”,“yellow”) )

Rem ( Se modifica las variables \_CAÑADIR\_PRE y \_CAÑADIR\_POS)

```auto
Set ( _CAÑADIR_PRE, "<span style='background:" + _CFONDO + ";" + "color:" + _CCOLOR + "'><b>") )
Set ( _CAÑADIR_POS, "</b></span>") )

```

El resto del codigo queda exactamente igual.`Texto preformateado`
