こんにちは、月の年から年を抽出する正規表現、つまり「August_2020」があります。 ただし、文字 Year "cYear" を数値に変換するための正しい構文を見つけることができなかったので、それを使って計算できます。 ポインタをいただければ幸いです。 ありがとう!!
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);または、変数の最後の4文字を取得して、正規表現関数よりも簡単な数値に変換できます
a = "October_2020";
nYear = Num(Right(a, 4));
小さいながらも理解できるエラーがいくつかあります。
SelMonth = {"October_2020"};
文字列を囲む中括弧 {} は、1 つの要素を作成しましたリスト. それが意図的だったかどうかはわかりません。 実際の問題 (提供したこの例とは対照的に) に複数要素のリスト ({"October_2020", "November_2020"} など) が含まれている場合は、従うべきもののいくつかを調整する必要があります。 我々に教えてください。
中かっこを削除して、文字列値を取得します。
SelMonth = "October_2020";
次の問題は次の行にあります。
cYear = (Regex Match (char(SelMonth), "\d{4}") );
正規表現マッチ()次のステップで問題を引き起こす可能性のあるリストを返します。 また、複雑すぎます。 代わりに、言葉()関数はあなたの友達です:数式エディタの機能を 1 つだけ学習した場合、Word() がその機能です。 .
cYear=Word(2, SelMonth, "_");
show(cYear);
/*:
cYear = "2020";
次の行に進みます。
nYear = Num ("cYear");
ここでは、変数名を引用符で囲んで、変数名ではなく文字リテラルにしています。 代わりに、次のものが必要です。
nYear = Num (cYear);
ただし、リストを返す Regex Match() 関数に戻ると、ここで問題が発生します。Num() 関数はリストを引数として取りません。
どうしても Regex Match() を使用する場合は、作業したいリストの要素を角括弧 [] をインデックスとして使用して指定する必要があります。
nYear = Num (cYear[1]);
注: Word() 関数を使用するという私の提案を採用する場合、これは不要です。
すべてをまとめると、必要なものは次のとおりです。
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);
ああ! はい、リストの最初の値です! TXさん、ありがとうございます。
変数 "SelMonth" は JMP リスト (つまり {} ) であるため、変数 "cYear" の値はリストです。
{"2020"}
「SelMonth」がリストである必要がある理由があると仮定すると、単純な解決策は、添え字を付けて「cYear」を参照し、値を取得することです。
nYear = Num (cYear[1]);