Limpiar texto


([N4] gontorre) #1

Buenas tardes

tengo un campo objeto texto en el que almaceno aa ficha técnica del producto. Esta ficha la rellenan los usuarios de forma manual. Unas veces la escriben, otras veces pegan el contenido desde un word, desde una celda de excel o desde la web del fabricante. Esto hace que en ocasiones se introduzcan caracteres no imprimibles que luego dan problemas al exportar la ficha en un JSON, por ejemplo.

¿Hay alguna forma de limpiar esos textos sin saber exactamente qué caracteres son los que hay que excluir?

Gracias y un saludo

Gonzalo Torre


([N4] victorgt) #2

Hazlo al reves.

Acota que caracteres aceptas y te cargas todos los demas.

Yo en ASCII alguna vez hice lo de “eliminar todos con valor inferior a 32”.
Quiza sirva el mismo truco pero usando la pagina de codigos que usa Velneo.

Pero esto solo sirve si es objeto texto, si es oobjeto texto enriquecido no se yo…

Saludos.


([N4] gontorre) #3

Gracias Victor

Lo había pensado, pero en las fichas hay caracteres especiales que si se debe mostrar como ® ™ y otros.

Lo estaba intentando con una expresión regular del tipo:

getStringRegExp(C_TEXTO, “[a-z0-9A-Z ÁÉÍÓÚáéíóúñÑ$%&()?¿¡!’@#+-_.,;:ºª<>/* \n \r \x2122 \x00A9 \x00AE \x007E]*”, 0, 0, 0)

Pero en cuanto encuentra un caracter fuera de la lista se corta el texto. Yo lo que querría es que si hay un caracter fuera de la lista lo desprecie y siga con el resto. Mi desconocimiento de las expresiones regulares es notable…

Un saludo

Gonzalo Torre


([N3] NexusFireMan) #4

Buenos días,

Yo tengo una sección en la cual trato HTML y y cambio una serie de textos por el mismo motivo.

Lo que hago es reemplazar el texto por espacios con replaceString(HTML, "TEXTO", " ")

Lo único malo seria indicar los caracteres que quieres eliminar.

Haz la prueba a ver si sirve para tu caso.


([N4] gontorre) #5

Buenos días Javier,

El problema que tengo es que justamente no sé que caracteres tengo que quitar.

Por ejemplo, en la ficha de un artículo veo un guión (-), pero realmente no es el guión que se escibe con el teclado. Debe ser algún bullet que se ha copiado de una web. Y así me pasa con miles de fichas de artículos que se han ido rellenando durante años.

Gracias y un saludo


([N3] NexusFireMan) #6

Buenos días Gonzalo,

Con la función replaceString(HTML, TEXTO ! [Alfabeto], " ") puedes reemplazar cualquier carácter distinto del alfanumérico y esto reemplazaría los caracteres o códigos que no quieres por un espacio.

Todo depende de como se realice la expresión, reemplazar el texto igual a, reemplazar el texto distinto de.

Un saludo.


([N1] wikan) #7

@gontorre para que la expresión regular no te corte tienes que usar el modificador /g al final de la expresión para que lo haga globalmente y no con solo cona la primera coincidencia.


([N3] pacosatu) #8

Hola Gonzalo.

Usa una fórmula Javascript:

var cCadenaTexto = theRegister.varToString(“CCADENA_TEXTO”)
var cResul = cCadenaTexto.replace(/[^a-z0-9A-Z ÁÉÍÓÚáéíóúñÑ$%&()?¿¡!’@#+-_.,;:ºª<>/* \n \r \x2122 \x00A9 \x00AE \x007E]*/g, “”);
cResul

El caracter ^ al comienzo de la expresión regular es la que niega la existencia de los caracteres válidos.

Saludos
Paco Satué


([N4] gontorre) #9

Buenos días

Manuel, he probado a poner /g al final de la expresión y me hace lo mismo. En cuanto llega al primer caracter que no está en la lista se corta.

Paco, he probado la formula javascript que me pones y me da error de caracter ilegal en la línea 2, caracter 87. Es en la “\n”

Un saludo


([N3] pacosatu) #10

Hola Gonzalo.

Revisa bien la sintaxis. ¡OJO! con el copia y pega del foro.
Te adjunto el ejemplo funcionando.

Saludos



([N4] gontorre) #11

Gracias Paco,

No sé qué narices estaba haciendo pero ahora me funciona perfectamente.

Un saludo


([N1] OscarBarea) #12

Hola Javier Duran,
Estoy intentando lo que comentas sobre la función, pero no me funciona, pongo el siguiente código:
replaceString(VALOR, VALOR = "/[^a-z0-9A-Z ÁÉÍÓÚáéíóúñÑ$%&()?¿¡!’@#+-_.,;:ºª<>/* \n \r \x2122 \x00A9 \x00AE \x007E]*/g", "")
Que hago mal?, he probado VALOR = y VALOR !
Oscar B.


([N1] OscarBarea) #13

Hola Paco,
Estoy intentando implementar la fórmula Javascript que comentas, pero me devuelve un error. Te paso el script:

//Recojo el valor de la variable VALOR
var cCadenaTexto = theRegister.varToString("VALOR")
var cResul = cCadenaTexto.replace(/[^a-z0-9A-Z ÁÉÍÓÚáéíóúñÑ$%&()?¿¡!’@#+\-_.,;:ºª<>/* \n \r \x2122 \x00A9 \x00AE \x007E]*/g, "");

alert (cResul);

//Le devolvemos el valor a la variable
theRoot.setVar("VALOR", cResul);

Que estoy haciendo mal?
Gracias


([N3] pacosatu) #14

Hola Oscar.

En las fórmulas javascript no se pueden usar comandos de interface, como alert, ni asignar valores a Variable locales del formulario. Esto es algo obvio en las fórmulas.

Para devolver el valor cResul, simplemente pon cResul, tal como he mostrado anteriormente.

Saludos
Paco Satué


([N1] OscarBarea) #15

Gracias Paco, me devuelve siempre el siguiente error:

//Recojo el valor de la variable VALOR
var cCadenaTexto = theRegister.varToString("VALOR")
var cResul = cCadenaTexto.replace(/[^a-z0-9A-Z ÁÉÍÓÚáéíóúñÑ$%&()?¿¡!’@#+\-_.,;:ºª<>/* \n \r \x2122 \x00A9 \x00AE \x007E]*/g, "");

cResul

Estas lineas están en un manejado de eventos JavaScript.
Si este código lo pongo directamente en el “Editor de fórmulas” tipo JavaScript, da muchos errores .
Lo siento, pero no se de JavaScript
Gracias


([N1] OscarBarea) #16

Estoy estancado,
Alguien sabe como limpiar la cadena de una variable “Set” desde un manejado de eventos?
Gracias
Oscar B.


([N4] gontorre) #17

Buenas tardes

Yo lo he solucionado con una función LIMPIAR_TEXTO(C_TEXTO). La función simplemente hace “Set dato de retorno” y en la fórmula del dato de retorno pongo el código javascript que me propuso Paco.

var cCadenaTexto = theRegister.varToString("C_TEXTO");
var cResul = cCadenaTexto.replace(/[^a-z0-9A-Z ÁÉÍÓÚáéíóúñÑ$%&()?¿¡!’@#+\-_.,;:ºª<>/*\n\r\x2122\x00A9\x00AE\x007E\x2022\x00BB]*/g, "");
cResul

A esa función la puedo llamar desde un manejador, contenido inicial o lo que sea.

Un saludo


([N3] pacosatu) #18

Hola Oscar.

Vamos a ver, si no sabes nada de Javascript ni del API, yo creo sinceramente que no pretenderás hacer cosas medianamente funcionales y ni mucho menos que te vayamos corrigiendo los fallos uno a uno.

El código que hemos planteado solo funciona en fórmulas javascript, no es funcional ni en manejadores javascript ni en procesos, porque el objeto theRegister solo existe de forma predefinida en las fórmulas javascript.

Estudia un poco el API y javascript y enseguida lo podrás adaptar a lo que quieras.

De todas formas intenta hacerlo con código nativo de Velneo, al fin y al cabo es recorrer una cadena e ir desechando los caracteres no deseados.

Saludos
Paco Satué


([N3] pacosatu) #19

Hola Gonzalo.

Se puede generalizar la función de la siguiente manera:


Rem (FUN_TXT_CHAR_PROCESAR)
Rem Dada una lista de caracteres CCARACTERES, los quitamos o conservamos de la cadena de texto CCADENA_TEXTO
Rem Si LCONSERVAR = 0 se quitan los caracteres y viceversa
Rem (Usa una expresión Regex para Quitar/Conservar los caracteres de un String)
Set (CRESUL, /*JAVASCRIPT*/ .....)
Set dato de retorno (CRESUL)

Este es el código de la fórmula javascript


// En la expresión regular:
//    El caracter ^ selecciona los caracteres que no coinciden
//    La g hace una búsqueda en todo el Texto
//    El * busca cualquier cantidad de caracteres
var cCadenaTexto = theRegister.varToString("CCADENA_TEXTO")
var cCaracteres = theRegister.varToString("CCARACTERES")
var lConservarCaracteres = theRegister.varToBool("LCONSERVAR")
var oRegex = new RegExp("[" + (lConservarCaracteres ? "^" : "") + cCaracteres + "]*","g")
cCadenaTexto.replace(oRegex,"")

De esta forma tenemos la posibilidad de conservar o quitar los caracteres indicados en el parámetro CCARACTERES.

Saludos
Paco Satué


([N1] OscarBarea) #20

Muchas gracias a los dos.
Paco, implementaré lo que comentas e intentaré iniciarme en javaScript
Saludos,
Oscar B.