Match() 内で Contains() を使用できますか文字列を検索して各行の値に特定の文字列が含まれているかどうかを確認し、それに応じて新しい列にインジケーター名/グループを作成する必要があります(最大 14 個の特定の文字列を検索します)。ネストされた IF() はかなり遅いと確信しています...以前、文字列を完全に一致させたいときに Match() を使用したことがありますが、ワイルドカードは使用できますか?
* と % を試しましたが、役に立ちませんでした。
Match( :columnOfInterest,
"*StringA*", "String A",
"*StringB*", "String B",
"" )
次に、Match() 内で Contains() を使用しようとしましたが、それでもうまくいきませんでした。
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA"), "String A",
Contains(:columnOfInterest, "StringB"), "String B",
"" )
Contains が数値を返すことがわかったので、> 比較を追加して、NUM() でラップすることも試しました。
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA") > 0, "String A",
Contains(:columnOfInterest, "StringB") > 0, "String B",
"" )
と
Match( :columnOfInterest,
Num(Contains(:columnOfInterest, "StringA")) > 0, "String A",
Num(Contains(:columnOfInterest, "StringB")) > 0, "String B",
"" )
助けていただければ幸いです。ありがとう!
Re: Match() 内で Contains() を使用できますかこれで私の問題は解決しました。 連想配列のことをすっかり忘れていました。 どうもありがとう!Re: Match() 内で Contains() を使用できますかJMP初心者

連想配列を使用して、別の文字列にマッピングする文字列のルックアップ テーブルを保存できます。
たとえば、上記の :searchTerms および :mappedTerms は、このような連想配列のキーと値です。 以下のコードでは、この配列は変数「lookup」に割り当てられます。 RESULTS マップされた列の最終的な式では、正規表現によって見つかったすべての一致が検索配列の引数として機能することがわかります。
たとえば、上の表の行 1 を取り上げます。 見つかった結果は「Integra」、マッピングされた結果は lookup["Accord"]、つまり「GroupA」です。
fmlaExpr = Expr(
If( Row() == 1,
lookUp = Associative Array( :searchTerms, :mappedTerms, Empty() );
vals = :searchTerms << get values;
doThis = Expr(
lookUp[Regex( :ColumnOfInterest, Char( "(" || Concat Items( vals, "|" ) || ")" ) )]
);
doThis;
,
doThis
)
);
Eval( Eval Expr( :RESULTS-mapped << set formula( Expr( Parse( Char( NameExpr(fmlaExpr)) ) ) ) ) );
完全な例の表を添付します。
Re: Match() 内で Contains() を使用できますか<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />パターンが 1 つしかないため、「\1」は実際には違いを生じないことに注意してください。 複数の括弧がある場合は、実際に「\1」または「\n」を含めることができます。n はパターンの数以下です。 JMPオンラインドキュメントを参照 ==>正規表現
Re: Match() 内で Contains() を使用できますかこれはすべて理にかなっていますが、ここで話を複雑にしてみます...
regex(test,"(ABC|DEF|GHI)","\1")
一致した文字列とは異なる文字列を返すことはできますか?
- 「ABC」が見つかった場合は「group1」を返します。
- 「DEF」が見つかった場合は、「group2」などを返します。
それとも正規表現では不可能なのでしょうか?
Re: Match() 内で Contains() を使用できますかPBZ と Jim に感謝します。Regex() はうまく機能し、スクリプト作成中に使用できる新しいツールができました。とても有難い!
Re: Match() 内で Contains() を使用できますか正規表現を使用する方法です。ここでは、必要な複数の一致を行う非常に簡単な例を示します。探している文字列を展開してください。見つかった一致を返します。
names default to here(1);
test="Answer is ABC";
TheMatch = regex(test,"(ABC|DEF|GHI)","\1");
Re: Match() 内で Contains() を使用できますかJMP初心者
条件文は完全に避けたいと思います。 より良い解決策は、正規表現を使用することです。 たとえば、検索語が車種、「アコード」、「シビック」などだった場合、次のような正規表現ステートメントを作成できます。 「いずれかの用語に一致」 。 JSL では、この列の式は次のようになります。
Regex( :columnOfInterest, "(Accord|Civic|Corolla|Dakota|Integra|Maxima|Ranger|S10)" );
この簡単なデモ ファイルを添付します。 Regex は文字列パターン マッチングにおいて非常に強力です。 単語の一部や語幹などを一致させるためのオプションが多数あります。これがお役に立てば幸いです。
-PBZ