Ciao, ho un'espressione regolare che estrae l'anno da un mese_anno, ad esempio "Agosto_2020". Tuttavia, non sono stato in grado di trovare la sintassi corretta per convertire il carattere Year "cYear" in numero, quindi posso fare matematica con esso. Apprezzerò qualsiasi suggerimento. Grazie!!
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);Oppure puoi ottenere le ultime 4 lettere della tua variabile e convertirle in un numero che è più semplice della funzione Regex
a = "October_2020";
nYear = Num(Right(a, 4));
Hai un numero di piccoli, ma comprensibili errori.
SelMonth = {"October_2020"};
Le parentesi graffe {} intorno alla stringa di caratteri hanno creato un elemento elenco . Non so se sia stato fatto apposta o meno. Se il tuo problema reale (al contrario di questo esempio che hai fornito) coinvolge un elenco multi-elemento (ad es. {"Ottobre_2020", "Novembre_2020"}), allora alcune delle cose che seguiranno dovrebbero essere aggiustate. Facci sapere.
Rimuovi le parentesi graffe per ottenere un valore di stringa di caratteri.
SelMonth = "October_2020";
Il prossimo problema è con la tua prossima riga:
cYear = (Regex Match (char(SelMonth), "\d{4}") );
Corrispondenza regex() restituisce un elenco che ti causerà problemi nel passaggio successivo. È anche eccessivamente complicato. Invece il Parola() la funzione è tua amica: Se impari solo una funzione dell'editor di formule, Word () è quella .
cYear=Word(2, SelMonth, "_");
show(cYear);
/*:
cYear = "2020";
Alla tua prossima riga:
nYear = Num ("cYear");
Qui hai messo il nome della tua variabile tra virgolette che lo rende un carattere letterale invece di un nome di variabile. Dovresti invece avere:
nYear = Num (cYear);
Tuttavia, tornare alla funzione Regex Match () che restituisce un elenco, qui causerà un problema.La funzione Num() non accetta un elenco come argomento.
Se insisti nell'usare Regex Match(), dovrai specificare l'elemento dell'elenco su cui vuoi lavorare usando le parentesi quadre [] come indice.
nYear = Num (cYear[1]);
Nota: se segui il mio suggerimento di utilizzare la funzione Word (), questo non è necessario.
Mettendo tutto insieme ecco cosa ti serve:
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! Sì, il primo valore della lista! Grazie TX,
La variabile "SelMonth" è una lista JMP (es. {} ), quindi il valore della variabile "cYear" è una lista
{"2020"}
Supponendo che ci sia un motivo per cui "SelMonth" deve essere un elenco, la soluzione semplice è fare riferimento a "cYear" con un pedice per ottenere il valore
nYear = Num (cYear[1]);