Cómo seleccionar patrones basados en segmentos de cuerdasHola,
Soy un nuevo usuario de JSL. Para agrupar una gran cantidad de pines y agregar nuevas columnas para esos grupos, estoy pensando en usar JSL. Llegué a saber cómo hacer eso para los primeros caracteres consecutivos (por ejemplo, para DDR0CH0CKN... Sé cómo filtrarlo usando DDR0...) pero si debo hacerlo usando segmentos como 'DDR0' y 'CK', ¿cuál sería una forma eficiente de hacerlo?
FYI: una forma, lo sé, es usar un archivo creado manualmente y luego usar el comando de actualización para hacer coincidir los pines con los grupos de pines (no es una forma eficiente). Intenté patMatch/regex, etc. pero no pude obtener el resultado deseado.
Para su comodidad, he adjuntado un archivo .jmp donde quiero tener una columna llamada "Desired_Pin_Group" para los pines.
Agradezco su cooperación.
Saludos,
Hafiz.
Re: Como seleccionar patrones basados en segmentos de cadenashafiz,
Me alegro de haber podido ayudarte a solucionar tu problema.
Re: Como seleccionar patrones basados en segmentos de cadenasHola txnelson,
Utilicé el concepto de declaración condicional que proporcionó y pude resolver mi problema. En lugar de convertir a minúsculas, agregué una nueva columna en la tabla y puse el nombre del pin directamente entre paréntesis, como:
dt < Fórmula(
Si(Contiene(:Pin, "_CK")>0 & Contiene(:Pin,"DDR0") & Contiene(:Pin, "_CKE")==0,"ddr0_clk",
Contiene(:Pin, "_CK")>0 & Contiene(:Pin,"DDR1") & Contiene(:Pin, "_CKE")==0,"ddr1_clk",
Sin embargo, lo estoy aceptando como una solución al problema.
Gracias por tu ayuda.
Saludos,
Hafiz.
Re: Como seleccionar patrones basados en segmentos de cadenasJMP proporciona un completo la coincidencia de patrones conjunto de funciones y construcciones que puede encontrar útiles aquí. Ver Ayuda > Libros > Guía de secuencias de comandos . Luego busque esta sección en el libro.
Re: Como seleccionar patrones basados en segmentos de cadenasGracias por su rápida respuesta. El script está bastante bien para el archivo .jmp que di anteriormente. Pero, por desgracia, no es tan sencillo. El número de pines está en el rango de 150-200 y están agrupados en 15-20 grupos. Eche un vistazo al archivo .jmp recién adjunto, está más cerca del escenario real. Solo eche un vistazo del 22 al 27 y del 81 al 83. Esos 2 grupos tienen DDR_Y en común, pero se filtran en función de otras frases dentro de la cadena. La lógica es algo como: if :Pin=='DDR_Y' && Pin != NC :Desired_Pin_Group=ddr_dq_ch0 else :Desired_Pin_Group=ddr_ctrl. Los criterios de distinción entre los grupos (81-83) y (93-96) son aún más complejos. Uno necesita buscar las últimas frases.
Tu cooperación es altamente apreciada.
Hafiz.
Re: Como seleccionar patrones basados en segmentos de cadenasAquí hay un script que hará lo que quieras, dado el ejemplo que diste.Si tiene muchas más combinaciones de pines que requieren procesamiento de excepciones, esta puede no ser la mejor manera de manejar esto.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Generated Pin Group", character );
For Each Row(
// Get the first part of the group name
First = Lowercase( Substr( :Pin, 1, 4 ) );
// Handle exceptions like the below case
If( First == "ddrr",
First = "ddr0"
);
// Now attach the "_"
First = First || "_";
// Now add the second part based upon the given complexities
// Handle the clk
If(
Contains( :Pin, "_CK" ) > 0 & Contains( :Pin, "_CKE" ) == 0, First = First || "clk",
// Handle the vref
Contains( :Pin, "_VREF" ) > 0, First = First || "vref",
// Handle the cke
Contains( :Pin, "_CKE" ) > 0, First = First || "cke",
// Handle the reset
Contains( :Pin, "RESET" ) > 0, First = First || "Reset"
);
:Generated Pin Group = First;
);
Si desea hacer esto como una fórmula para una columna, es solo un simple cambio
First = Lowercase( Substr( :Pin, 1, 4 ) );
If( First == "ddrr",
First = "ddr0"
);
First = First || "_";
If(
Contains( :Pin, "_CK" ) > 0 & Contains( :Pin, "_CKE" ) == 0,
First = First || "clk",
Contains( :Pin, "_VREF" ) > 0, First = First || "vref",
Contains( :Pin, "_CKE" ) > 0, First = First || "cke",
Contains( :Pin, "RESET" ) > 0, First = First || "Reset"
);
First;