Hallo, ich habe einen regulären Ausdruck, der das Jahr aus einem Monat_Jahr extrahiert, also „August_2020“. Allerdings konnte ich nicht die richtige Syntax finden, um das Zeichen Year „cYear“ in eine Zahl umzuwandeln, damit ich damit rechnen kann. Ich freue mich über jeden Hinweis. Danke!!
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);Oder Sie können die letzten 4 Buchstaben Ihrer Variablen abrufen und sie in eine Zahl umwandeln, was einfacher ist als die Regex-Funktion
a = "October_2020";
nYear = Num(Right(a, 4));
Sie haben eine Reihe kleiner, aber verständlicher Fehler.
SelMonth = {"October_2020"};
Die geschweiften Klammern {} um Ihre Zeichenfolge haben ein Eins-Element erstellt Liste . Ich weiß nicht, ob das Absicht war oder nicht. Wenn Ihr eigentliches Problem (im Gegensatz zu diesem Beispiel, das Sie bereitgestellt haben) eine Liste mit mehreren Elementen betrifft (z. B. {"Oktober_2020", "November_2020"}), müssen einige der folgenden Punkte angepasst werden. Lass uns wissen.
Entfernen Sie die geschweiften Klammern, um einen Zeichenfolgewert zu erhalten.
SelMonth = "October_2020";
Das nächste Problem ist mit Ihrer nächsten Zeile:
cYear = (Regex Match (char(SelMonth), "\d{4}") );
Regex-Match() gibt eine Liste zurück, die Ihnen im nächsten Schritt Probleme bereiten wird. Es ist auch zu kompliziert. Stattdessen die Wort() Funktion ist dein Freund: Wenn Sie nur eine Funktion des Formeleditors erlernen, ist Word() die richtige .
cYear=Word(2, SelMonth, "_");
show(cYear);
/*:
cYear = "2020";
Weiter zu Ihrer nächsten Zeile:
nYear = Num ("cYear");
Hier haben Sie Ihren Variablennamen in Anführungszeichen gesetzt, wodurch er zu einem Zeichenliteral und nicht zu einem Variablennamen wird. Stattdessen sollten Sie Folgendes haben:
nYear = Num (cYear);
Wenn wir jedoch auf die Regex Match()-Funktion zurückkommen, die eine Liste zurückgibt, wird dies hier ein Problem verursachen.Die Funktion Num() akzeptiert keine Liste als Argument.
Wenn Sie darauf bestehen, Regex Match() zu verwenden, müssen Sie das Element der Liste, an dem Sie arbeiten möchten, mit eckigen Klammern [] als Index angeben.
nYear = Num (cYear[1]);
Hinweis: Wenn Sie meinen Vorschlag annehmen, die Word()-Funktion zu verwenden, ist dies unnötig.
Alles in allem benötigen Sie Folgendes:
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! Ja, der erste Wert der Liste! Danke TX,
Die Variable „SelMonth“ ist eine JMP-Liste (dh {} ), daher ist der Wert der Variablen „cYear“ eine Liste
{"2020"}
Angenommen, es gibt einen Grund dafür, dass „SelMonth“ eine Liste sein muss, besteht die einfache Lösung darin, mit einem Index auf „cYear“ zu verweisen, um den Wert zu erhalten
nYear = Num (cYear[1]);