buscar subcadena entre una variedad de cadenasTengo una columna con el nombre de la falla, que contiene todo tipo de cadenas. Me gusta buscar el código de error que comienza con "ex". El código de error es una cadena de 10 caracteres que comienza con "ex". y pongo el primer código de error en la columna de "1er código", todos los códigos de error en la columna de "todos los códigos". ¿Qué fórmula se establece en ambas columnas? Perdón por molestarte de nuevo. Necesito hacer mi trabajo rápidamente en manos cerradas primero, luego tomarme el tiempo para aprender el documento de ayuda de JMP.

Análisis y modelado de datos básicosRe: buscar subcadenas a partir de una variedad de cadenasEsta publicación podría ayudar a extraer el código de la pieza defectuosa de una cadena no estructurada
Re: buscar subcadenas a partir de una variedad de cadenasAquí hay una forma de crear estas 2 columnas.
Fórmula para el código :fst
start = contains(:Failure,"0x");
if(start>0,substr(:Failure,start,start+10),"");
Fórmula para: Todos los códigos
theCodes = {};;
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, start + 10 ) );
theString = Substr( theString, start + 10 );
);
concat items(theCodes, ",");Re: buscar subcadenas a partir de una variedad de cadenasRealmente agradezco su oportuna ayuda. Con la fórmula, se detectan los códigos de error, pero también aparecen otros caracteres. Lo resolví usando left(), pero me gustaría saber por qué aparecen los otros caracteres allí.

Re: buscar subcadenas a partir de una variedad de cadenasSin tener la tabla de datos para usarla para depurar el problema, no estoy seguro de cuál es. Pruebe esta modificación y vea si funciona mejor.
start = contains(:Failure,"0x");
x="";
if(start>0,x=substr(:Failure,start,start+10),"");
x;
Re: buscar subcadenas a partir de una variedad de cadenas@txnelson gracias por dedicar tu tiempo al tema. Lo intenté de nuevo y sigue fallando. Aquí tienes la tabla de datos para la depuración.
Re: buscar subcadenas a partir de una variedad de cadenasMi error,
La longitud del elemento Substr debe ser Start, no Start+10.
Primer código
start = Contains( :Failure, "0x" );
If( start > 0,
Substr( :Failure, start, 10 ),
""
);
Todos los códigos
theCodes = {};
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, 10 ) );
theString = Substr( theString, start + 10 );
);
Concat Items( theCodes, "," );Re: buscar subcadenas a partir de una variedad de cadenas¡¡¡Un millón de gracias!!!
Re: buscar subcadenas a partir de una variedad de cadenasSi es posible que tengas mensajes mezclados que comienzan con 0x pero no son códigos de error, simplemente Contains podría funcionar, pero según los ejemplos que nos has proporcionado, este no parece ser el caso (o si tienes, por ejemplo, 0x123456, que es más corto que lo que definiste como código de error).
Si este es el caso, yo miraría la expresión regular (puedes usar una idea similar con el bucle While, como lo demostró Jim con el contenedor). Pero debes tener un buen conocimiento de los caracteres permitidos para crear un patrón sólido para una coincidencia adecuada.
Re: buscar subcadenas a partir de una variedad de cadenas@jthi gracias por tus comentarios. Estoy tratando de usar Regex para buscar la subcadena que comienza con 0x. Según tu publicación recomendada, es una buena idea " Nueva columna por coincidencia de texto ". Estoy pensando en cómo construir el patrón para el código de error (o el código de error no está limitado a 10 caracteres). La instrucción de Backreferences y Capturing Groups for Regex puede ayudarme a comprender el JSL relacionado, pero me resulta un poco difícil escribir JSL. Creo que cuantos más ejemplos de JSL lea, más pronto aprenderé a escribir JSL. Volviendo al tema, ¿podrías hacerme un favor y mostrarme el patrón Regex del código de error? Por ejemplo, en tu publicación, está
failure_pattern = "[A-Z]+\d+[A-Z]?"
Re: buscar subcadenas a partir de una variedad de cadenasDada la tabla de datos de muestra que proporcionó, la fórmula para extraer el primer código de error utilizando la función Regex() es
Regex( :Failure, "[A-Z]+\d+[A-Z]?" )
La definición y los ejemplos de la función Regex() se encuentran en el índice de secuencias de comandos.
Re: buscar subcadenas a partir de una variedad de cadenasEs posible que JSL no tenga todas las opciones ( Regex: add options for all flags , Add flag to Regex Match() to find all non-sollancing instances of pattern ) pero aún así acepta patrones similares. Usa algo como https://regex101.com/ para probar tus patrones de expresiones regulares (si no estás seguro de si enviarán datos a algún servidor, no uses datos reales a menos que puedas compartirlos) y luego pruébalo en JSL. Los sitios web como regex101 te explican el patrón.
No tengo una definición adecuada de los códigos de error, por lo que no puedo proporcionar buenos patrones para comenzar. Solo sé que comienza con 0x, pero necesitaría saber cuáles son los caracteres permitidos, si existe algún orden para estos caracteres permitidos y cómo determinar cuándo termina (y cuál es la longitud, si la hay).
Re: buscar subcadenas a partir de una variedad de cadenasHoy me tomé un tiempo para leer la Definición y Ejemplos de la función Regex() que se encuentra en el Índice de Scripts, y aprendí la estructura del patrón Regex como ([a-zA-Z])\s([0-9]). Es maravilloso compartir que el uso de https://regex101.com/ prueba los patrones regex.
Regex() o Regex match() es una función un poco complicada. Necesito encontrar más ejemplos de la comunidad para practicar el uso de Regex(). Muchas gracias por compartir los enlaces.