Hola, tengo una expresión regular que extrae el año de un mes_año, es decir, "agosto_2020". Sin embargo, no he podido encontrar la sintaxis correcta para convertir el carácter Año "cAño" en número para poder hacer operaciones matemáticas con él. Agradeceré cualquier sugerencia. ¡¡Gracias!!
Names Default To Here( 1 );
SelMonth = {"October_2020"};
cYear = (Regex Match (char(SelMonth), "\d{4}") );
//convert character year to number year
nYear = Num ("cYear"); //Scripting Guide p137
//Subtract 1 and get previous year
pYear = (nYear - 1);
//convert previous year to character
cpYear = Char ( pYear);O puede obtener las últimas 4 letras de su variable y convertirlas en un número que es más fácil que la función Regex
a = "October_2020";
nYear = Num(Right(a, 4));
Tienes una serie de errores pequeños, pero comprensibles.
SelMonth = {"October_2020"};
Las llaves {} alrededor de su cadena de caracteres han creado un elemento lista . No sé si fue a propósito o no. Si su problema real (a diferencia de este ejemplo que proporcionó) involucra una lista de elementos múltiples (por ejemplo, {"Octubre_2020", "Noviembre_2020"}), entonces será necesario ajustar parte de lo que sigue. Haznos saber.
Quite las llaves para obtener un valor de cadena de caracteres.
SelMonth = "October_2020";
El siguiente problema es con su siguiente línea:
cYear = (Regex Match (char(SelMonth), "\d{4}") );
Coincidencia de expresiones regulares () devuelve una lista que le causará problemas en su próximo paso. También es demasiado complicado. En cambio, el Palabra() La función es tu amiga: Si aprende solo una función del Editor de fórmulas, Word() es la única .
cYear=Word(2, SelMonth, "_");
show(cYear);
/*:
cYear = "2020";
En su próxima línea:
nYear = Num ("cYear");
Aquí ha puesto el nombre de su variable entre comillas, lo que lo convierte en un carácter literal en lugar de un nombre de variable. En su lugar, deberías tener:
nYear = Num (cYear);
Sin embargo, volver a la función Regex Match() que devuelve una lista, eso causará un problema aquí.La función Num() no tomará una lista como argumento.
Si insiste en usar Regex Match(), deberá especificar el elemento de la lista en el que desea trabajar usando llaves cuadradas [] como índice.
nYear = Num (cYear[1]);
Nota: Si acepta mi sugerencia de usar la función Word(), esto no es necesario.
Poniendo todo junto, esto es lo que necesita:
Names Default To Here( 1 );
SelMonth = "October_2020";
cYear = (Regex Match (char(SelMonth), "\d{4}") );
cYear=Word(2, SelMonth, "_");
//convert character year to number year
nYear = Num (cYear); //Scripting Guide p137
//Subtract 1 and get previous year
pYear = (nYear - 1);
//convert previous year to character
cpYear = Char ( pYear);
¡Ay! ¡Sí, el primer valor de la lista! Gracias tx,
La variable "SelMonth" es una lista JMP (es decir, {}), por lo tanto, el valor de la variable "cYear" es una lista
{"2020"}
Suponiendo que hay una razón por la que "SelMonth" debe ser una lista, la solución simple es hacer referencia a "cYear" con un subíndice para obtener el valor
nYear = Num (cYear[1]);