Bonjour, j'ai une expression régulière qui extrait l'année d'un mois_année, c'est-à-dire "août_2020". Cependant, je n'ai pas été en mesure de trouver la syntaxe correcte pour convertir le caractère Année "cYear" en nombre afin que je puisse faire des calculs avec. J'apprécierai tous les pointeurs. Merci!!
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);Ou vous pouvez obtenir les 4 dernières lettres de votre variable et les convertir en nombre, ce qui est plus facile que la fonction Regex
a = "October_2020";
nYear = Num(Right(a, 4));
Vous avez un certain nombre d'erreurs petites, mais compréhensibles.
SelMonth = {"October_2020"};
Les accolades {} autour de votre chaîne de caractères ont créé un élément liste . Je ne sais pas si c'était exprès ou non. Si votre problème réel (par opposition à cet exemple que vous avez fourni) implique une liste à plusieurs éléments (par exemple {"October_2020", "November_2020"}), une partie de ce qui va suivre devra être ajustée. Faites le nous savoir.
Supprimez les accolades pour obtenir une valeur de chaîne de caractères.
SelMonth = "October_2020";
Le problème suivant est avec votre ligne suivante :
cYear = (Regex Match (char(SelMonth), "\d{4}") );
Correspondance Regex() renvoie une liste qui va vous causer des problèmes lors de votre prochaine étape. C'est aussi trop compliqué. Au lieu de cela, le Mot() la fonction est votre amie : Si vous n'apprenez qu'une seule fonction de l'éditeur de formule, Word() est celle .
cYear=Word(2, SelMonth, "_");
show(cYear);
/*:
cYear = "2020";
Passons à votre ligne suivante :
nYear = Num ("cYear");
Ici, vous avez mis votre nom de variable entre guillemets, ce qui en fait un caractère littéral au lieu d'un nom de variable. Au lieu de cela, vous devriez avoir :
nYear = Num (cYear);
Cependant, revenir à la fonction Regex Match() renvoyant une liste, cela posera un problème ici.La fonction Num() ne prendra pas une liste comme argument.
Si vous insistez pour utiliser Regex Match(), vous devrez spécifier l'élément de la liste sur lequel vous souhaitez travailler en utilisant des accolades [] comme index.
nYear = Num (cYear[1]);
Remarque : si vous acceptez ma suggestion d'utiliser la fonction Word(), cela n'est pas nécessaire.
En rassemblant tout cela, voici ce dont vous avez besoin :
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);
Ah ! Oui, la première valeur de la liste ! Merci TX,
La variable "SelMonth" est une liste JMP (c'est-à-dire {}), donc la valeur de la variable "cYear" est une liste
{"2020"}
En supposant qu'il y ait une raison pour laquelle "SelMonth" doit être une liste, la solution simple consiste à référencer "cYear" avec un indice pour obtenir la valeur
nYear = Num (cYear[1]);